This is Kara’s first pass at looking at the Packet 7 data (with data from 2019-03-18). (Note: PDF printed portrait, 80% zoom, minimum margins.)

Confirmatory hypotheses (as specified in preregistration)

NOTE: I included all participants, even if they failed attention checks, since we did not specify that we would exclude participants in the preregistration. At some point we should try running everything on the subset of participants who passed all attention checks just so that we know, but this decreases our sample sizes pretty dramatically.

ALSO NOTE: I included only the second sample of Ghanaian participants, who were recruited according to our standards and as specified in the preregistration. For the most part, all results are the same when including the full, “double” sample of Ghanaian participants.

ALSO NOTE: In Thailand this packet was missing one question on the Porosity (Dulin) scale. I have rescaled Thai participants’ Porosity scores to run from 0-32 in order to match the other sites.

Hypothesis #1

Hypothesis #1: People who score higher on the Tellegen Absorption Scale (Tellegen & Atkinson, 1974) also report more spiritual experiences.

Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using absorption scores to predict reports of spiritual experiences, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ absorption * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). Our prediction is that the main effect of absorption on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)

If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ absorption * scale + (1 | site/subject)."

Here are our results:

We found evidence in favor of Hypothesis #1: As predicted, the main effect of absorption was significantly positive (see bolded row in table above).

For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.21 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 3.46 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.16 points on the Spiritual Events scale (range: 0-80).

Hypothesis #2

Hypothesis #2: People who score higher on our two porosity indices also report more spiritual experiences.

Preregistered analysis: “We will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using porosity scores (from each of our two indices) to predict reports of spiritual experiences across the 2 spiritual experience scales included in our survey packet, allowing for differences across our five field sites and across the two scales we used to measure spiritual experience. Using the “lme4” package for R (Bates, 2018), we will specify this model as follows: experience ~ porosity * site * scale + (1 | subject), where “scale” is a categorical variable comparing the two spiritual experience scales (effect-coded), and “site” is a categorical variable comparing the five field sites (effect-coded). We will run two versions of this model, one using each of the two “porosity” measures described above. For each regression, our prediction is that the main effect of porosity on experience will be significantly positive (b > 0, t > 2, p < 0.05 using Satterthwaite’s degrees of freedom method as implemented in the “lmerTest” package for R, Kuznetsova, Brockhoff, & Christensen, 2017). (The rest of the parameters included in the model will be of great interest to us, but are exploratory.)

If we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ porosity * scale + (1 | site/subject)."

Here are our results, using the Porosity scale (Dulin):

And here are our results, using the Martha Story scale:

In both cases, we found evidence in favor of Hypothesis #2: As predicted, the main effect of porosity was significantly positive in both regression analyses (see bolded rows in tables above).

For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.37 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 7.48 points on the Porosity scale (range: 0-32), participants (on average) increased by 6.26 points on the Daily Spiritual Experiences scale (range: 0-70) or 5.73 points on the Spiritual Events scale (range: 0-80).

For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.26 standard deviations in their spiritual experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 4.36 points on the Daily Spiritual Experiences scale (range: 0-70) or 3.99 points on the Spiritual Events scale (range: 0-80).

Hypothesis #3

Hypothesis #3: The positive relationship between absorption and experience is statistically significant in each field site individually.

Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #1 to assess the relationship[] between absorption and spiritual experience […] in each field site individually. For Hypothesis #3, our models will take the following form: experience ~ absorption * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”

Here are our results:

We found evidence in favor of Hypothesis #3 in all sites except Vanuatu: As predicted, the main effect of absorption was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (although some would consider the effect “marginally significant”; see bolded rows in table above).

(See other relevant plots under “Hypothesis #1,” above.)

Hypothesis #4

Hypothesis #4: The positive relationship between absorption and experience is statistically significant in each field site individually.

Preregistered analysis: “For each of our five field sites, we will standardize scores on each measure (considering only participants from that field site), and then conduct the same analyses specified above for Hypothesis #2 to assess the relationship[…] between porosity and experience in each field site individually. […] For Hypothesis #4, our models will take the following form: experience ~ porosity * scale + (1 | subject). […] Again, our prediction is that the main effect of absorption on experience and of each porosity measure on experience will be significantly positive (b > 0, p < 0.05).”

Here are our results, using the Porosity scale (Dulin):

Using the Porosity scale, We found evidence in favor of Hypothesis #4 in all sites: As predicted, the main effect of porosity was significantly positive in the US, Ghana, Thailand, China, and Vanuatu (see bolded rows in table above).

And here are our results, using the Martha Story scale:

Using the Martha Story scale, We found evidence in favor of Hypothesis #4 in all sites except Vanuatu: As predicted, the main effect of Martha Story was significantly positive in the US, Ghana, Thailand, and China—but this was not the case in Vanuatu (see bolded rows in table above).

(See other relevant plots under “Hypothesis #2,” above.)

Secondary exploratory analyses

“Secular” experiences

From preregistration: “First, in order to explore the question of whether affirmation of spiritual experience, porosity and absorption are simply due to the religiosity of participants, we will conduct additional analyses focusing on the two “secular” experience scales (the revised Launay Slade scale, Morrison, Wells and Nothard 2000]; and the Sheep-Goat [paranormal] scale, Thalborne & Delin, 1993). These analyses will be identical to the primary analyses outlined above, except that they will only include these two “secular experience” scales and not the two spiritual experience scales. We consider these to be exploratory analyses.”

Parallel to Hypothesis #1

In parallel to Hypothesis #1, the relationship between absorption and secular experience was also significantly positive (see bolded row table above).

For every increase of 1 standard deviation in absorption, participants (on average) increased by 0.36 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 6.51 points on the Absorption scale (range: 0-34), participants (on average) increased by 1.16 points on the Uncommon Events scale (range: 0-18) or 0.73 points on the Extrasensory scale (range: 0-7).

This was actually a (numerically) stronger effect than what we documented for spiritual experiences (b = 0.36 vs. b = 0.21). We did not provide a prediction about whether or not this would be the case in the preregistration.

Parallel to Hypothesis #2

Here are our results, using the Porosity scale (Dulin):

And here are our results, using the Martha Story scale:

In parallel to Hypothesis #2, in both cases, the relationship between porosity and secular experience was significantly positive (see bolded rows in tables above).

For every increase of 1 standard deviation in porosity as indexed by the Porosity (Dulin) scale, participants (on average) increased by 0.45 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 7.48 points on the Porosity scale (range: 0-32), participants (on average) increased by 1.43 points on the Uncommon Events scale (range: 0-18) or 0.9 points on the Extrasensory scale (range: 0-7).

For every increase of 1 standard deviation in porosity as indexed by the Martha Story scale, participants (on average) increased by 0.31 standard deviations in their secular experiences. In concrete terms, this means that for every increase of 10.55 points on the Martha Story scale (range: 0-54), participants (on average) increased by 0.99 points on the Uncommon Events scale (range: 0-18) or 0.62 points on the Extrasensory scale (range: 0-7).

These were actually (numerically) stronger effects than what we documented for spiritual experiences (Porosity: b = 0.45 vs. b = 0.37; Martha Story: b = 0.31 vs. b = 0.26). We did not provide a prediction about whether or not this would be the case in the preregistration.

Parallel to Hypothesis #3

Here are our results:

In parallel to Hypothesis #3, the relationship between absorption and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #1,” above.)

Parallel to Hypothesis #4

In parallel to Hypothesis #4, using the Porosity (Dulin) scale, the relationship between porosity and secular experience was significantly positive in all sites, including Vanuatu (where the relationship with spiritual experience was not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

And here are our results, using the Martha Story scale:

In parallel to Hypothesis #4, using the Martha Story scale, the relationship between porosity and secular experience was significantly positive in all sites except Vanuatu (where the relationship with spiritual experience was also not significantly positive; see bolded rows in table above). We did not provide a prediction about whether or not this would be the case in the preregistration.

(See other relevant plots under “Parallel to Hypothesis #2,” above.)

“Control” scales (Hypothesis #5)

From preregistration: “Second, in order to examine whether the hypothesized relationships between absorption and experience and between porosity and experience can be explained by a lower-level processes—namely, individual or cross-cultural differences in an overall tendency to agree with the questions posed by these scales (i.e., a “yes” bias), we will also examine the relationships between the two “control” scales (the Sense of Control scale, Lachman & Weaver, 1998; and the Need for Cognition scale, Cacioppo, Petty, & Kao, 1993) and our measures of absorption, porosity, and experience. This provides something of a negative control for our primary hypotheses. Our prediction is that any relationships with these control measures will be weaker than the relationships among absorption, porosity, and experience. To assess this, we will standardize scores on each measure, collapsing across field sites, and then conduct a mixed-effects linear regression, using scores on absorption, porosity, and control scales to predict reports of spiritual experiences. Using the “stats” package for R, we will specify this model as follows: experience ~ score * predictor * site + (1 | subject), where “site” is a categorical variable comparing the five field sites (effect-coded), and—critically—“predictor” is a categorical variable with the following orthogonal contrasts: (1) Scales of interest (absorption and the two porosity measures) vs. control scales; (2) absorption vs. porosity measures; (3) porosity as indexed by the Dulin scale vs. porosity as indexed by the Mental Causation scale; (4) Need for Cognition vs. Need for Control (Mastery Subscale). Because of the unusual and complex formulation of this model—considering each of these 5 “predictors” as repeated observations of the variable “score”—we will conduct separate models for the two spiritual experience scales (Daily Spiritual Experiences and Spiritual Events), rather than incorporating both spiritual experiences measures into the same model (as in Hypotheses #1-4). As in Hypotheses #1-4, if we have trouble fitting these models or there are other signs of model fit problems, we will consider the following alternative model: experience ~ score * predictor + (1 | site/subject). We consider these to be confirmatory tests, and in each case our prediction is that the two-way interaction between “score” and the first orthogonal contrast on “predictor” (comparing the predictive power of our scales of interest vs. our two control scales) will be significantly positive (b > 0, t > 2, p < 0.05).”

Although we did not number this hypothesis in the preregistration, I’m going to go ahead and call it Hypothesis #5.

NOTE: Neither of the models we specified in the preregistration were able to run. I think this is due to an error in my thinking (about which of our measures were “repeated measures”). The models reported here are very close to what we preregistered.

Here are our results using the Daily Spiritual Experiences scale:

And here are our results using the Spiritual Events scale:

In both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors.

“Control” scales, without reverse coding

The two control scales are the only scales that have reverse-coded items! This is really too bad, because it means that they are not actually good ways to assess a yes-bias.

In an attempt to remedy this, here I re-scoring these scales after dropping reverse-coded items.

Collapsing across sites

Here are our results using the Daily Spiritual Experiences scale:

And here are our results using the Spiritual Events scale:

Again, in both cases, we found evidence in favor of Hypothesis #5: As predicted, the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded row in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors.

Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).Removed 15 rows containing non-finite values (stat_smooth).Removed 15 rows containing missing values (geom_point).

In each site considered alone

Here I conduct a set of parallel analyses, considering each site alone.

Here are our results for the Daily Spiritual Experiences scale:

Here are our results for the Daily Spiritual Experiences scale:

In both cases, we found evidence in favor of Hypothesis #5 in almost all sites: In most sites, as predicted the interaction between “score” and the first contrast on the “predictor” parameter was significantly positive (see bolded rows in tables above), whether indexed spiritual experiences using the DSE or SE scales. In other words, the “predictors of interest” (absorption and the two porosity measures) were better predictors of spiritual experience than our two “control” predictors, even when we only included the non-reverse-coded items from the two “control” predictors. The only exceptions to this were Ghana when using the Daily Spiritual Experiences scale (first table above), and Vanuatu when using the Spiritual Events scale (second table above).

Beyond the preregistration

Combined effects of absorption and porosity on spiritual experiences (absorption controlling for porosity & vice versa)

Collapsing across sites

Here I examine a big model, in which both absorption and porosity together predict spiritual experiences. This allows us to look at the effect of absorption controlling for porosity, the effect of porosity controlling for absorption, and the possibility of an interaction between absorption and porosity. I look at porosity as indexed by the Porosity (Dulin) scale and as indexed by the Martha Story separately, and use both the Daily Spiritual Experience and Spiritual Events scales to index spiritual experience.

Here are our results using the Porosity (Dulin) scale:

And here are our results using the Martha Story scale:

In both cases, we see evidence for absorption and porosity being positively related to spiritual experiences even after controlling for each other: The relationship between absorption and spiritual experience was significantly positive, controlling for porosity; and the effect of porosity (as indexed by either the Dulin scale or the Martha Story scale) and spiritual experience was also significantly positive, controlling for absorption. There was no strong evidence of an interactive effect of absorption and porosity in either case (see bolded rows in tables above).

In each site considered alone

Here I conduct a set of parallel analyses, considering each site alone.

Here are our results using the Porosity (Dulin) scale:

And here are our results using the Martha Story scale:

In both cases, we see some evidence for porosity “swamping out” the effect of absorption in some sites, including Ghana, China, and Vanuatu when porosity is indexed by the Porosity (Dulin) scale; and the US, Ghana, and Vanuatu when porosity is indexed by the Martha Story scale (in fact, in this second set of analyses, neither Absorption nor Martha Story ends up being a significant predictor of spiritual experience in Ghana or Vanuatu).

Absorption as primarily individual difference, porosity as primarily cultural difference?

In our theorizing, we often assume that absorption is primarily an individual difference, while porosity is primarily a cultural difference—or at least that absorption is more of an individual difference than is porosity. Do we see any evidence of this in this dataset?

Do individuals vary more in absorption than porosity?

The first way I thought of to approach this question is to look at the degree to which individuals vary in each of these three scales (Absorption, Porosity (Dulin), and Martha Story). We would predict that absorption would vary more across individuals than either of the porosity indices (after resclaing all threee scales to have the same range, within each site).

According to Bartlett tests of homogeneity of variances, the only site where we see the pattern that we’d expect is Vanuatu: Individuals differed significantly more in their Absorption scores than in their Porosity (Dulin) scores or Martha Story scores. In China, individuals differed significantly more in their Absorption scores than in their Martha Story scores, but variance was equal across the Absorption and Porosity scores. In Ghana, we actually saw the reverse pattern to what we’d expect: Individuals differed significantly less in their Absorption scores than in their Martha Story scores (and the differences between Absorption and Porosity (Dulin) also went in the same directly, although it was not significant).

My take-away here is that there is no strong evidence from these analyses of homogeneity of variance that individuals (within a site) varied more in absorption than in porosity.

Do site differences account for more of the variance in porosity than in absorption?

The second way I thought of to approach this question is to look at the amount of variance explained by site differences for in each of these three scales (Absorption, Porosity (Dulin), and Martha Story). We would predict that site differences would explain more of the variance in porosity than in absorption (no rescaling necessary here).

Numerically speaking, this appears to be true: In a set of linear models, site differences explain only 9% of the variance in Absorption scores, vs. 40% of the variance in Porosity (Dulin) scores and 22% of the variance in Martha Story scores.

Here, I’ll try to compare these statistically (using scores for each scale that have been standardized, collapsing across sites):

This analysis appears to be consistent: I think that the interactions that I have bolded in the table above suggest that the differences across sites (here, coded as differences between (a) non-US and US sites, (b) Ghana and Vanuatu vs. Thailand and China, (c) Ghana vs. Vanuatu, and (d) Thailand vs. China) were generally exaggerated in the two porosity scales compared to the Absorption scale, and these seems to be true from the following plot:

My take-away here is that there is pretty strong evidence from these resression analyses that site differences accounted for more of the variance in porosity than in absorption.

Religiosity

Collapsing across sites

Do the relationships between absorption and porosity, on the one hand, and spiritual experience, on the other hand, still hold even after controlling for participants’ self-reported religiosity?

Following other analysis, I examined this separately using Porosity (Dulin) and Martha Story as indices of porosity. In both cases, religiosity was a significant positive predictor of spiritual experience (as we’d expect). But, importantly, the main effects of porosity remained significantly positive in both analyses, even after controlling for participants’ self-reported religiosity (see bolded rows in tables above). The main effect of absorption remained significantly positive when porosity was indexed by the Martha Story (second table), but not when porosity was indexed by the Porosity (Dulin) scale (although some would consider this effect to be “marginally significant”).

My take-away here is that religiosity does not fully “explain away” the observed relationships between absorption and porosity, on the one hand, and spiritual experience, on the other.

In each site considered alone

Here I conduct a set of parallel analyses, considering each site alone.

And here are our results using the Martha Story scale:

I see two general patterns here:

  1. In the US, Thai, and Chinese samples, absorption, porosity, and religiosity all remain significant predictors of spiritual experience when controlling for each other in one of the two analyses reported above. In the other analysis, there is some evidence for “swamping out”: In the US and Chinese samples, the effect of absorption becomes non-significant in the other analysis; and in Thailand, the effect of porosity becomes non-significant in the other analysis. Generally speaking, though, I’d say this is moderate evidence that religiosity does not fully “explain away” the effects of absorption and porosity in these three sites (the US, Thailand, and China).
  2. In Ghana and Vanuatu, only religiosity remains a significant predictor of spiritual experience in these analyses. This could be interpreted as evidence that religiosity does “explain away” the effects of absorption and porosity in these two (devoutly Christian) sites (Ghana and Vanuatu).

To help with our interpretation, here are the correlations with religiosity, this time looking at scores standardized within each site:

Joining, by = c("p7_ctry", "scale")

Which experiences are predicted by absorption vs. porosity?

Collapsing across sites

Here are the top ten most strongly correlated items for each of our three predictors of interest (Absorption, Porosity (Dulin), and Martha Story):

Correlation Question text Scale
Absorption
0.356 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
0.326 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.294 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
0.288 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.264 12. Have you ever felt a demonic presence as if it was there in the room with you? [Demon in room] Spiritual Events
0.259 8) [send msg]. I am completely convinced that I have had at least one experience of sending a "mental message" between myself and another person. Extrasensory
0.258 4. I can hear music when it is not being played. [music] Unusual Events
0.245 3. I hear people call my name and find that nobody has done so. [call name] Unusual Events
0.244 5. Have you ever felt that God or a spirit placed an image inside your head? [image in] Spiritual Events
0.230 19. Have you ever had the experience of being awake but unable to move? [awake paralysis] Spiritual Events
Porosity (Dulin)
0.617 10. I feel God's love for me, directly. [direct love] Daily Spiritual Experiences
0.616 9. I feel guided by God in the midst of daily activities. [guided daily] Daily Spiritual Experiences
0.595 11. I feel God's love for me, through others. [love through others] Daily Spiritual Experiences
0.569 4. I find strength in my religion or spirituality. [spiritual strength] Daily Spiritual Experiences
0.567 3. Have you felt that God or a spirit placed thoughts inside your head? [placed thought] Spiritual Events
0.562 8. I ask for God's help in the midst of daily activities. [God help] Daily Spiritual Experiences
0.544 1. I feel God's presence. [God presence] Daily Spiritual Experiences
0.540 12. I am spiritually touched by the beauty of creation. [touched by beauty] Daily Spiritual Experiences
0.521 3. During worship, or at other times when connecting with God, I feel joy which lifts me out of my daily concerns. [no daily concerns] Daily Spiritual Experiences
0.510 5. I find comfort in my religion or spirituality. [spiritual comfort] Daily Spiritual Experiences
Martha Story
0.470 23. Have you ever experienced the presence of God through your own miraculous healing? [heal you] Spiritual Events
0.465 9. I feel guided by God in the midst of daily activities. [guided daily] Daily Spiritual Experiences
0.451 10. I feel God's love for me, directly. [direct love] Daily Spiritual Experiences
0.448 11. I feel God's love for me, through others. [love through others] Daily Spiritual Experiences
0.443 3. Have you felt that God or a spirit placed thoughts inside your head? [placed thought] Spiritual Events
0.427 22. Have you ever experienced the presence of God in a miraculous healing (that you saw in person, not on television)? [live heal] Spiritual Events
0.414 21. Have you ever experienced the presence of God through illness (including as warning or punishment)? [illness] Spiritual Events
0.413 3. During worship, or at other times when connecting with God, I feel joy which lifts me out of my daily concerns. [no daily concerns] Daily Spiritual Experiences
0.411 1. I feel God's presence. [God presence] Daily Spiritual Experiences
0.404 4. I find strength in my religion or spirituality. [spiritual strength] Daily Spiritual Experiences

And here’s a visualization of the correlations of these three predictors with all “experience” items in this packet (spiritual and secular):

Considering each site individually

Here are the top three most strongly correlated items for each of our three predictors of interest (Absorption, Porosity (Dulin), and Martha Story):

Site Correlation Question text Scale
Absorption
US 0.515 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
0.491 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.380 3) [psychic]. I am completely convinced that I am psychic. Extrasensory
Ghana 0.333 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.262 14. I feel a selfless caring for others. [selfless care] Daily Spiritual Experiences
0.246 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
Thailand 0.403 6. I have had the experience of hearing a person's voice and then found that there was no one there. [no one's voice] Unusual Events
0.377 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.345 12. I am spiritually touched by the beauty of creation. [touched by beauty] Daily Spiritual Experiences
China 0.366 15. Have you ever had a feeling of overwhelming emotion during prayer? [emotional prayer] Spiritual Events
0.357 14. Have you ever had an experience of uncontrollable shaking or trembling during prayer, or been slain in the spirit? [shaking prayer] Spiritual Events
0.352 7. I see shadows and shapes when there is nothing there. [shadows] Unusual Events
Vanuatu 0.397 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.313 3. I hear people call my name and find that nobody has done so. [call name] Unusual Events
0.253 5. Have you ever felt that God or a spirit placed an image inside your head? [image in] Spiritual Events
Porosity (Dulin)
US 0.580 12. Have you ever felt a demonic presence as if it was there in the room with you? [Demon in room] Spiritual Events
0.579 1) [esp exists]. I am completely convinced that ESP exists. [ESP is extrasensory perception, or psychic ability] Extrasensory
0.554 9. Have you ever had a dream you felt was sent by God or a spirit? [dream] Spiritual Events
Ghana 0.353 14. Have you ever had an experience of uncontrollable shaking or trembling during prayer, or been slain in the spirit? [shaking prayer] Spiritual Events
0.340 9. Have you ever had a dream you felt was sent by God or a spirit? [dream] Spiritual Events
0.314 3. During worship, or at other times when connecting with God, I feel joy which lifts me out of my daily concerns. [no daily concerns] Daily Spiritual Experiences
Thailand 0.479 16. Have you ever had a sense of intense power shoot through you during prayer? [powerful prayer] Spiritual Events
0.413 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
0.378 10. I feel God's love for me, directly. [direct love] Daily Spiritual Experiences
China 0.577 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
0.569 8) [send msg]. I am completely convinced that I have had at least one experience of sending a "mental message" between myself and another person. Extrasensory
0.558 1) [esp exists]. I am completely convinced that ESP exists. [ESP is extrasensory perception, or psychic ability] Extrasensory
Vanuatu 0.444 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.367 12. I am spiritually touched by the beauty of creation. [touched by beauty] Daily Spiritual Experiences
0.310 2. I experience a connection to all of life. [connection to life] Daily Spiritual Experiences
Martha Story
US 0.610 12. Have you ever felt a demonic presence as if it was there in the room with you? [Demon in room] Spiritual Events
0.599 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.539 7) [distant msg]. I am completely convinced that it is possible to send a "mental message" to another person, or in some way influence them at a distance, by means other than normal means of communication. Extrasensory
Ghana 0.321 23. Have you ever experienced the presence of God through your own miraculous healing? [heal you] Spiritual Events
0.297 7. I see shadows and shapes when there is nothing there. [shadows] Unusual Events
0.288 14. Have you ever had an experience of uncontrollable shaking or trembling during prayer, or been slain in the spirit? [shaking prayer] Spiritual Events
Thailand 0.385 8. Have you ever felt that you tasted God or a spirit? [taste] Spiritual Events
0.330 21. Have you ever experienced the presence of God through illness (including as warning or punishment)? [illness] Spiritual Events
0.322 16. Have you ever had a sense of intense power shoot through you during prayer? [powerful prayer] Spiritual Events
China 0.417 13. Have you ever experienced a supernatural presence that was not God, a spirit, or a demon? [supernatural presence] Spiritual Events
0.404 1) [esp exists]. I am completely convinced that ESP exists. [ESP is extrasensory perception, or psychic ability] Extrasensory
0.389 22. Have you ever experienced the presence of God in a miraculous healing (that you saw in person, not on television)? [live heal] Spiritual Events
Vanuatu 0.345 1. I hear a voice speaking my thoughts aloud. [voice aloud] Unusual Events
0.256 15. I accept others even when they do things I think are wrong. [accept wrong] Daily Spiritual Experiences
0.255 2. I experience a connection to all of life. [connection to life] Daily Spiritual Experiences

And here’s a visualization of the correlations of these three predictors with all “experience” items in this packet (spiritual and secular):

Porosity: good vs. bad emotions

Which emotions were considered most “potent” in our measures of porosity?

Porosity scale (Dulin)

The items coded by TML as “negative” seem to have elicited somewhat stronger endorsements than the items coded as “positive,” though this difference appears to have been quite small (maybe n ot significant) in the US and China.

What about when we look at individual quesitons?

Joining, by = "question"

I’m not going to comment on this at the moment. (But note that Thailand was missing question #13 in this scale - throughout this document, scores for Thailand have been adjusted accordingly so that Thai participants do not have artifically deflated Porosity scores!)

Joining, by = "question"

Martha story

Removed 3 rows containing missing values (geom_point).

To my eyes, there is no single pattern here: In the US and China, caring seems to have elicited stronger responses than the other emotions; in Vanuatu and possibly Thailand, anger seems to have elicted stronger responses; in Ghana, the three emotions seem to have elicited roughly similar responses.

What about when we look at individual quesitons?

Joining, by = "question"

Joining, by = "question"

This complicates (and to my mind, clarifies) the picture somewhat. Here are a few observations:

  • In some sites participants were pretty consistent across questions in terms of the “ordering” of emotions: e.g….
    • In the US (leftmost column), caring was virtually always most potent
    • In China (fourth column from left), caring was almost always most potent, with the major exception of question “d” (whether the emotion could make the emoter sick/well)
    • In Vanuatu (rightmost column) anger was almost always most potent (with the major exception of question “c” (whether a spirit could use the emotion to hurt/help)
  • In other sites participants differentiated more between different kinds of questions: e.g….
    • In Thailand, (middle column) anger was more potent for questions “b” and “d,” while caring was clearly more potent for question “e”
  • Some questions elicited similar “orderings” of emotions across sites: e.g….
    • For question “c” (whether a spirit could use the emotion to hurt/help), when sites differentiated across emotions, it tended to be in the direction of caring being most potent (but people didn’t really differentiate in Ghana or Thailand)
    • For question “d” (whether the emotion could make the emoter sick/well), when sites differentiated across emotions, it tended to be in the direction of anger being most potent (but people didn’t really differentiate in the US)
    • For question “e” (whether, if the other person got sick/well, the emoter’s emotion could be the cause), when sites differentiated across emotions, it tended to be in the direction of caring being most potent (but people didn’t really differentiate in Vanuatu)
  • Other questions elicited different “orderings” of emotions across sites (quesiton “a,” whether the emoter could hurt/help the other with their emotion; and question “b,” whether the emoter could hurt/help the other just by thinking emotional thoughts)

Overall scores

Histograms for each scale

Absorption

Daily spiritual experiences

Spiritual events

Ways of being

All items

Excluding reverse-coded items

attributes are not identical across measure variables;
they will be droppedNAs introduced by coercion

Uncommon events

Extrasensory

Hard thinking

All items

Excluding reverse-coded items

attributes are not identical across measure variables;
they will be droppedNAs introduced by coercion

Porosity

Martha story

Reliability

Demographics

[1] "Participants who passed all attention checks"
[1] "All participants"
[1] "Participants who passed all attention checks"
[1] "All participants"

Important to note that a very substantial majority of participants in Thailand were female, and a slight majority of participants in Vanuatu were female.

[1] "Participants who passed all attention checks"
[1] "All participants"
LS0tCnRpdGxlOiAiUGFja2V0IDcgKEtXIGZpcnN0IHBhc3MpIgpzdWJ0aXRsZTogIkxhc3QgdXBkYXRlZDogMjAxOS0wNC0zMCIKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwogICAgdG9jX2RlcHRoOiA0CiAgICB0b2NfZmxvYXQ6IHllcwphbHdheXNfYWxsb3dfaHRtbDogeWVzCi0tLQoKVGhpcyBpcyBLYXJhJ3MgZmlyc3QgcGFzcyBhdCBsb29raW5nIGF0IHRoZSBQYWNrZXQgNyBkYXRhICh3aXRoIGRhdGEgZnJvbSAyMDE5LTAzLTE4KS4gKE5vdGU6IFBERiBwcmludGVkIHBvcnRyYWl0LCA4MCUgem9vbSwgbWluaW11bSBtYXJnaW5zLikKCmBgYHtyIGdsb2JhbF9vcHRpb25zLCBpbmNsdWRlID0gRn0Ka25pdHI6Om9wdHNfY2h1bmskc2V0KGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjY3LAogICAgICAgICAgICAgICAgICAgICAgaW5jbHVkZSA9IEYsIGVjaG8gPSBGKQpgYGAKCmBgYHtyfQpsaWJyYXJ5KHRpZHl2ZXJzZSkKbGlicmFyeShsYW5nY29nKQpsaWJyYXJ5KHBzeWNoKQpsaWJyYXJ5KHJlYWR4bCkKbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KGxtZTQpCmxpYnJhcnkobG1lclRlc3QpCmxpYnJhcnkoa2FibGVFeHRyYSkKbGlicmFyeShsdWJyaWRhdGUpCgp0aGVtZV9zZXQodGhlbWVfYncoKSkKYGBgCgpgYGB7cn0KZF9yYXcgPC0gcmVhZF94bHN4KCIuL2RhdGEgZnJvbSBOaWtraS9QYWNrZXQgN19DT0RFRF9NYXJjaCAxOCwgMjAxOS54bHN4IiwKICAgICAgICAgICAgICAgICAgIHNoZWV0ID0gMSkKYGBgCgpgYGB7cn0KdmFyX2tleSA8LSBkX3Jhd1sxLF0gJT4lCiAgdCgpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInF1ZXN0aW9uIikgJT4lCiAgcmVuYW1lKHF1ZXN0aW9uX3RleHQgPSAiLiIpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDtCIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMOuIiwgIiAtICIsIHF1ZXN0aW9uX3RleHQpLAogICAgICAgICBxdWVzdGlvbl90ZXh0ID0gZ3N1Yigi4oCaw4TDuiIsICInIiwgcXVlc3Rpb25fdGV4dCksCiAgICAgICAgIHF1ZXN0aW9uX3RleHQgPSBnc3ViKCLigJrDhMO5IiwgIiciLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIlxuIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIlxyIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSwKICAgICAgICAgcXVlc3Rpb25fdGV4dCA9IGdzdWIoIiAgIiwgIiAiLCBxdWVzdGlvbl90ZXh0KSkgJT4lCiAgbXV0YXRlKG9yZGVyID0gMTpucm93KC4pLAogICAgICAgICBzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBxdWVzdGlvbiksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gaWZlbHNlKHNjYWxlICVpbiUgYygiZW50ciIsICIyZGF5IiwgInZlciIsICJiYXRjIiwgInJlc2FtcGxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJjdHJ5IiwgInN1YmoiLCAiZmlsZSIsICJyZWNyIiwgIndoZXIiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3aG9jIiksICJkYXRhX2VudHJ5Iiwgc2NhbGUpKSAlPiUKICBzZWxlY3Qob3JkZXIsIHNjYWxlLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCkgJT4lCiAgYXJyYW5nZShvcmRlcikKYGBgCgpgYGB7cn0KIyBjaGVjayBmb3IgZHVwbGljYXRlcwpkdXBsaWNhdGVzIDwtIGRfcmF3ICU+JQogIGNvdW50KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGZpbHRlcihuID4gMSkKCmQwMCA8LSBmdWxsX2pvaW4oZF9yYXcgJT4lCiAgICAgICAgICAgICAgICAgICBmaWx0ZXIoKCFwN19zdWJqICVpbiUgZHVwbGljYXRlcyRwN19zdWJqKSksCiAgICAgICAgICAgICAgICAgZF9yYXcgJT4lIAogICAgICAgICAgICAgICAgICAgZmlsdGVyKHA3X3N1YmogJWluJSBkdXBsaWNhdGVzJHA3X3N1YmogJiBwN19iYXRjID09IDEpKQoKIyBlbGltaW5hdGUgZmlyc3Qgc2FtcGxlIGZyb20gZ2hhbmEgKHBvb3JseSBjb2xsZWN0ZWQpCmQwMCA8LSBkMDAgJT4lCiAgZmlsdGVyKCEocDdfcmVzYW1wbGUgPT0gIjEiICYgcDdfY3RyeSA9PSAiNCIpKQoKZDAwICU+JQogIGNvdW50KHA3X2N0cnksIHA3X3N1YmopICU+JQogIGZpbHRlcihuID4gMSkKCmQwMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiAgY291bnQocDdfY3RyeSkKYGBgCgpgYGB7cn0KZDAgPC0gZDAwWy0xLF0gJT4lICMgZ2V0IHJpZCBvZiBxdWVzdGlvbiB0ZXh0CiAgbXV0YXRlX2F0KHZhcnMoc3RhcnRzX3dpdGgoInA3X2Fic18iKSwgc3RhcnRzX3dpdGgoInA3X2RzZV8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfc2VfIiksIHN0YXJ0c193aXRoKCJwN193b2JfIiksCiAgICAgICAgICAgICAgICAgc3RhcnRzX3dpdGgoInA3X3VuZXZfIiksIHN0YXJ0c193aXRoKCJwN19leHNlbl8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfaHRoa18iKSwgc3RhcnRzX3dpdGgoInA3X3Bvcl8iKSwKICAgICAgICAgICAgICAgICBzdGFydHNfd2l0aCgicDdfbW1fIiksIHA3X2RlbV9hZ2UsIHA3X2RlbV9zZXMsCiAgICAgICAgICAgICAgICAgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpLCAKICAgICAgICAgICAgZnVucyhhcy5udW1lcmljKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZGVtX2hvbHkudHVuZy5naWYpLAogICAgICAgICAgICBmdW5zKHJlY29kZV9mYWN0b3IoLiwgIjAiID0gIm5vIiwgIjEiID0gInllcyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfYWJzX2NoZWNrLCBwN19kc2VfY2hlY2ssIHA3X3NlX2NoZWNrLCBwN191bmV2X2NoZWNrLCAKICAgICAgICAgICAgICAgICBwN19leHNlbl9jaGVjaywgcDdfcG9yX2NoZWNrLCBwN19tbV9jaGVjayksCiAgICAgICAgICAgIGZ1bnMocmVjb2RlX2ZhY3RvciguLCAiMCIgPSAicGFzcyIsICIxIiA9ICJmYWlsIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19hYnNfY2hpbGQuZXhwOnA3X2Fic19zdW5zZXQpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlKC4sICIwIiA9IEYsICIxIiA9IFQpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZHNlX2dvZC5wcmVzY246cDdfZHNlX2FjY2VwdC53cm9uZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib25jZSBpbiBhIHdoaWxlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWUgZGF5cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJtb3N0IGRheXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiNCIgPSAiZXZlcnkgZGF5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIm1hbnkgdGltZXMgYSBkYXkiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3NlX3ZvaWNlLm91dDpwN19zZV9vd24uaGVhbGluZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmV2ZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAib25jZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJzZXZlcmFsIHRpbWVzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gImZhaXJseSBvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICI0IiA9ICJ2ZXJ5IG9mdGVuIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN193b2Jfc2V0Lm1pbmRfcmV2ZXJzZTpwN193b2JfZnV0dXJlLm9uLm1lX3JldmVyc2UpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlX2ZhY3RvciguLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0zIiA9ICJzdHJvbmdseSBkaXNhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMiIgPSAic29tZXdoYXQgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gImEgbGl0dGxlIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5laXRoZXIgYWdyZWUgbm9yIGRpc2FncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gImEgbGl0dGxlIGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gInNvbWV3aGF0IGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gInN0cm9uZ2x5IGFncmVlIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN193b2JfbGl0dGxlLmNoYW5nZTpwN193b2JfcHVzaGVkLmFyb3VuZCksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAic3Ryb25nbHkgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAic29tZXdoYXQgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiYSBsaXR0bGUgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibmVpdGhlciBhZ3JlZSBub3IgZGlzYWdyZWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gImEgbGl0dGxlIGFncmVlIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0yIiA9ICJzb21ld2hhdCBhZ3JlZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMyIgPSAic3Ryb25nbHkgYWdyZWUiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3VuZXZfdm9pY2UuYWxvdWQ6cDdfdW5ldl9zaGFkb3dzKSwKICAgICAgICAgICAgZnVucygiY2F0IiA9IHJlY29kZV9mYWN0b3IoLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIwIiA9ICJuZXZlciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJzb21ldGltZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAib2Z0ZW4iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMyIgPSAiYWxtb3N0IGFsd2F5cyIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfZXhzZW5fZXNwLmV4aXN0czpwN19leHNlbl9zZW5kLm1zZyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAiaGFzIG5vdCBoYWQgdGhlIGV4cGVyaWVuY2UgKG5vKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJoYXMgaGFkIHRoZSBleHBlcmllbmNlICh5ZXMpIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19odGhrX2NvbXBsZXg6cDdfaHRoa19yZXNwb25zYmx0LCBwN19odGhrX2xvbmcuaHJzLAogICAgICAgICAgICAgICAgIHA3X2h0aGtfd2F5LnRvLnRvcDpwN19odGhrX25ldy5zb2x0aW9ucywKICAgICAgICAgICAgICAgICBwN19odGhrX3B1enpsZXM6cDdfaHRoa19pbnRlbC50YXNrLCBwN19odGhrX25vdC5wZXJzb25hbCksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTIiID0gImV4dHJlbWVseSBub3QgbGlrZSBtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMSIgPSAic29tZXdoYXQgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm90IHN1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAic29tZXdoYXQgbGlrZSBtZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJleHRyZW1lbHkgbGlrZSBtZSIpKSkgJT4lCiAgbXV0YXRlX2F0KHZhcnMocDdfaHRoa19ub3QuZnVuOnA3X2h0aGtfYXZvaWQudGhpbmssIAogICAgICAgICAgICAgICAgIHA3X2h0aGtfaHJkLmhhdi50bzpwN19odGhrX2xpbC50aG91Z2h0LCBwN19odGhrX25vdC5leGNpdGluZywKICAgICAgICAgICAgICAgICBwN19odGhrX21lbnRhbC5lZmZydDpwN19odGhrX2pvYi5kb25lKSwKICAgICAgICAgICAgZnVucygiY2F0IiA9IHJlY29kZV9mYWN0b3IoLiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJleHRyZW1lbHkgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAic29tZXdoYXQgbm90IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm90IHN1cmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTEiID0gInNvbWV3aGF0IGxpa2UgbWUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiLTIiID0gImV4dHJlbWVseSBsaWtlIG1lIikpKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19wb3JfdGhncy5ocnQsIHA3X3Bvcl93aWZpLnRoZ3M6cDdfcG9yX2FuZ3IuY250cmwsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3NwcnQuZW52eTpwN19wb3JfcmVhZC50aGdzLCBwN19wb3Jfc3RyZS5zcG9pbCwKICAgICAgICAgICAgICAgICBwN19wb3JfY29uc2x0LnVuc2VlbjpwN19wb3Jfc3Brbi5jdXJzZSwKICAgICAgICAgICAgICAgICBwN19wb3JfY3Vyc2Uuc2ljazpwN19wb3JfZmFsbC5pbi5sb3YsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3RoZ3MuaGVhbDpwN19wb3JfdmlzdWFsaXphdGlvbiksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAiaXQgZG9lcyBub3QgaGFwcGVuIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIml0IG1pZ2h0IGhhcHBlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJpdCBkZWZpbml0ZWx5IGhhcHBlbnMiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X3Bvcl90aGdzLmh1cnRfYTpwN19wb3JfdGhncy5odXJ0X2MsCiAgICAgICAgICAgICAgICAgcDdfcG9yX2FuZ3IuY250cmxfYTpwN19wb3JfYW5nci5jbnRybF9jLAogICAgICAgICAgICAgICAgIHA3X3Bvcl9yZWFkLnRoZ3NfYTpwN19wb3JfcmVhZC50aGdzX2MsCiAgICAgICAgICAgICAgICAgcDdfcG9yX3N0cmUuc3BvaWxfYTpwN19wb3Jfc3RyZS5zcG9pbF9jLAogICAgICAgICAgICAgICAgIHA3X3Bvcl9zcGtuLmN1cnNlX2E6cDdfcG9yX3Nwa24uY3Vyc2VfYywKICAgICAgICAgICAgICAgICBwN19wb3JfZmFsbC5pbi5sb3ZfYTpwN19wb3JfZmFsbC5pbi5sb3ZfYyksCiAgICAgICAgICAgIGZ1bnMoImNhdCIgPSByZWNvZGVfZmFjdG9yKC4sIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMCIgPSAibm8iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMSIgPSAiYSBsaXR0bGUiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAiYSBsb3QiKSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X21tX2FuZ19mZWVsLmh1cnQ6cDdfbW1fc3BydC50aGdzLmh1cnQpLAogICAgICAgICAgICBmdW5zKCJjYXQiID0gcmVjb2RlX2ZhY3RvciguLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gIm5ldmVyIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gInJhcmVseSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJvZnRlbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIzIiA9ICJ2ZXJ5IG9mdGVuIikpKSAlPiUKICBtdXRhdGUocDdfY3RyeSA9IHJlY29kZV9mYWN0b3IocDdfY3RyeSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIlVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjQiID0gIkdoYW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIlRoYWlsYW5kIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIkNoaW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjUiID0gIlZhbnVhdHUiKSwKICAgICAgICAgcDdfc3ViaiA9IGZhY3RvcihwN19zdWJqKSwKICAgICAgICAgcDdfZGVtX3NleCA9IHJlY29kZV9mYWN0b3IocDdfZGVtX3NleCwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJtYWxlIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIyIiA9ICJmZW1hbGUiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjMiID0gIm90aGVyIiksCiAgICAgICAgIHA3X2RlbV9ydXIudXJiID0gcmVjb2RlX2ZhY3RvcihwN19kZW1fcnVyLnVyYiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJydXJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiMiIgPSAidXJiYW4iKSwKICAgICAgICAgcDdfZGVtX2FmZnJkLmJhc2ljcyA9IHJlY29kZV9mYWN0b3IocDdfZGVtX2FmZnJkLmJhc2ljcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjEiID0gIm5vIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gInllcyIpLAogICAgICAgICBwN19kZW1fc2VzX2NhdCA9IHJlY29kZV9mYWN0b3IocDdfZGVtX3NlcywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICItMiIgPSAibXVjaCBwb29yZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIi0xIiA9ICJhIGxpdHRsZSBwb29yZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjAiID0gImFib3V0IHRoZSBzYW1lIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIxIiA9ICJhIGxpdHRsZSByaWNoZXIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIjIiID0gIm11Y2ggcmljaGVyIikpICU+JQogIHNlbGVjdCgtYyhwN19lbnRyOnA3X3Jlc2FtcGxlLCBwN19maWxlOnA3X3dob2MpKSAlPiUKICBkaXN0aW5jdCgpCmBgYAoKYGBge3J9CiMgY291bnQgYW55b25lIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVja3MKIyBleGNsdWRlIGFueW9uZSB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2tzCiMgZF9mYWlsIDwtIGQwICU+JQojICAgZmlsdGVyKHA3X2Fic19jaGVjayA9PSAiZmFpbCIgfCBwN19kc2VfY2hlY2sgPT0gImZhaWwiIHwgCiMgICAgICAgICAgICBwN19zZV9jaGVjayA9PSAiZmFpbCIgfCBwN191bmV2X2NoZWNrID09ICJmYWlsIiB8IAojICAgICAgICAgICAgcDdfZXhzZW5fY2hlY2sgPT0gImZhaWwiIHwgcDdfcG9yX2NoZWNrID09ICJmYWlsIiB8CiMgICAgICAgICAgICBwN19tbV9jaGVjayA9PSAiZmFpbCIpCiMgZF9mYWlsICU+JSBjb3VudChwN19jdHJ5KQoKZDAgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiY2hlY2siKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBhdHRlbnRpb25fY2hlY2ssIGNvbnRhaW5zKCJjaGVjayIpKSAlPiUKICBjb3VudChwN19jdHJ5LCBzY2FsZSwgYXR0ZW50aW9uX2NoZWNrKSAlPiUKICBzcHJlYWQoYXR0ZW50aW9uX2NoZWNrLCBuKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKQoKIyBleGNsdWRlIGFueW9uZSB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2tzCmQgPC0gZDAgJT4lCiAgZmlsdGVyKHA3X2Fic19jaGVjayAhPSAiZmFpbCIsIHA3X2RzZV9jaGVjayAhPSAiZmFpbCIsIHA3X3NlX2NoZWNrICE9ICJmYWlsIiwKICAgICAgICAgcDdfdW5ldl9jaGVjayAhPSAiZmFpbCIsIHA3X2V4c2VuX2NoZWNrICE9ICJmYWlsIiwKICAgICAgICAgcDdfcG9yX2NoZWNrICE9ICJmYWlsIiwgcDdfbW1fY2hlY2sgIT0gImZhaWwiKQpgYGAKCmBgYHtyfQojICMgY2hlY2sgY291bnRyeSBjb2RlcwojIGQgJT4lIAojICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaikgJT4lCiMgICBtdXRhdGUocDdfc3Vial9maXJzdGRpZyA9IHN1YnN0cihwN19zdWJqLCAxLCAxKSkgJT4lCiMgICBjb3VudChwN19jdHJ5LCBwN19zdWJqX2ZpcnN0ZGlnKQpgYGAKCmBgYHtyfQpkMCAlPiUgCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJhYnMiKSkgJT4lIAogIHNlbGVjdCgtZW5kc193aXRoKCJfY2F0IiksIC1jb250YWlucygidG90YWwiKSwgLWNvbnRhaW5zKCdjaGVjaycpKSAlPiUKICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShyZXNwb25zZSkpICU+JQogIGNvdW50KHA3X2N0cnksIHF1ZXN0aW9uKSAlPiUKICBjb21wbGV0ZShwN19jdHJ5LCBuZXN0aW5nKHF1ZXN0aW9uKSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBmaWx0ZXIobiA8IDIwKQpgYGAKCmBgYHtyfQpkMCAlPiUgCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJwb3IiKSkgJT4lIAogIHNlbGVjdCgtZW5kc193aXRoKCJfY2F0IiksIC1jb250YWlucygidG90YWwiKSwgLWNvbnRhaW5zKCdjaGVjaycpKSAlPiUKICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShyZXNwb25zZSkpICU+JQogIGNvdW50KHA3X2N0cnksIHF1ZXN0aW9uKSAlPiUKICBjb21wbGV0ZShwN19jdHJ5LCBuZXN0aW5nKHF1ZXN0aW9uKSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBmaWx0ZXIobiA8IDIwKQoKIyBDT1JSRUNUIEZPUiBNSVNTSU5HIFFVRVNUSU9OIElOIFRIQUlMQU5ECmQwIDwtIGQwICU+JQogIG11dGF0ZShwN19wb3JfdG90YWwgPSBjYXNlX3doZW4ocDdfY3RyeSA9PSAiVGhhaWxhbmQiIH4gCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHA3X3Bvcl90b3RhbCAqIDMyLzMwLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IHA3X3Bvcl90b3RhbCkpCmBgYAoKYGBge3J9CmQwICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoIm1tIikpICU+JSAKICBzZWxlY3QoLWVuZHNfd2l0aCgiX2NhdCIpLCAtY29udGFpbnMoInRvdGFsIiksIC1jb250YWlucygnY2hlY2snKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIGZpbHRlcighaXMubmEocmVzcG9uc2UpKSAlPiUKICBjb3VudChwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgY29tcGxldGUocDdfY3RyeSwgbmVzdGluZyhxdWVzdGlvbiksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZmlsdGVyKG4gPCAyMCkKYGBgCgpgYGB7cn0KZDAgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiX3NlXyIpKSAlPiUgCiAgc2VsZWN0KC1lbmRzX3dpdGgoIl9jYXQiKSwgLWNvbnRhaW5zKCJ0b3RhbCIpLCAtY29udGFpbnMoJ2NoZWNrJykpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlKSkgJT4lCiAgY291bnQocDdfY3RyeSwgcXVlc3Rpb24pICU+JQogIGNvbXBsZXRlKHA3X2N0cnksIG5lc3RpbmcocXVlc3Rpb24pLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGZpbHRlcihuIDwgMjApCmBgYAoKYGBge3J9CmQwICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoImRzZSIpKSAlPiUgCiAgc2VsZWN0KC1lbmRzX3dpdGgoIl9jYXQiKSwgLWNvbnRhaW5zKCJ0b3RhbCIpLCAtY29udGFpbnMoJ2NoZWNrJykpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlKSkgJT4lCiAgY291bnQocDdfY3RyeSwgcXVlc3Rpb24pICU+JQogIGNvbXBsZXRlKHA3X2N0cnksIG5lc3RpbmcocXVlc3Rpb24pLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGZpbHRlcihuIDwgMjApCmBgYAoKYGBge3J9CmQwICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoImV4c2VuIikpICU+JSAKICBzZWxlY3QoLWVuZHNfd2l0aCgiX2NhdCIpLCAtY29udGFpbnMoInRvdGFsIiksIC1jb250YWlucygnY2hlY2snKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIGZpbHRlcighaXMubmEocmVzcG9uc2UpKSAlPiUKICBjb3VudChwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgY29tcGxldGUocDdfY3RyeSwgbmVzdGluZyhxdWVzdGlvbiksIGZpbGwgPSBsaXN0KG4gPSAwKSkgJT4lCiAgZmlsdGVyKG4gPCAyMCkKYGBgCgpgYGB7cn0KZDAgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidW5ldiIpKSAlPiUgCiAgc2VsZWN0KC1lbmRzX3dpdGgoIl9jYXQiKSwgLWNvbnRhaW5zKCJ0b3RhbCIpLCAtY29udGFpbnMoJ2NoZWNrJykpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlKSkgJT4lCiAgY291bnQocDdfY3RyeSwgcXVlc3Rpb24pICU+JQogIGNvbXBsZXRlKHA3X2N0cnksIG5lc3RpbmcocXVlc3Rpb24pLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGZpbHRlcihuIDwgMjApCmBgYAoKYGBge3J9CmQwICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoIndvYiIpKSAlPiUgCiAgc2VsZWN0KC1lbmRzX3dpdGgoIl9jYXQiKSwgLWNvbnRhaW5zKCJ0b3RhbCIpLCAtY29udGFpbnMoJ2NoZWNrJykpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBmaWx0ZXIoIWlzLm5hKHJlc3BvbnNlKSkgJT4lCiAgY291bnQocDdfY3RyeSwgcXVlc3Rpb24pICU+JQogIGNvbXBsZXRlKHA3X2N0cnksIG5lc3RpbmcocXVlc3Rpb24pLCBmaWxsID0gbGlzdChuID0gMCkpICU+JQogIGZpbHRlcihuIDwgMjApCmBgYAoKYGBge3J9CmQwICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoImh0aGsiKSkgJT4lIAogIHNlbGVjdCgtZW5kc193aXRoKCJfY2F0IiksIC1jb250YWlucygidG90YWwiKSwgLWNvbnRhaW5zKCdjaGVjaycpKSAlPiUKICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgZmlsdGVyKCFpcy5uYShyZXNwb25zZSkpICU+JQogIGNvdW50KHA3X2N0cnksIHF1ZXN0aW9uKSAlPiUKICBjb21wbGV0ZShwN19jdHJ5LCBuZXN0aW5nKHF1ZXN0aW9uKSwgZmlsbCA9IGxpc3QobiA9IDApKSAlPiUKICBmaWx0ZXIobiA8IDIwKQpgYGAKCiMgQ29uZmlybWF0b3J5IGh5cG90aGVzZXMgKGFzIHNwZWNpZmllZCBpbiBwcmVyZWdpc3RyYXRpb24pCgpfTk9URTogSSBpbmNsdWRlZCBhbGwgcGFydGljaXBhbnRzLCBldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MsIHNpbmNlIHdlIGRpZCBub3Qgc3BlY2lmeSB0aGF0IHdlIHdvdWxkIGV4Y2x1ZGUgcGFydGljaXBhbnRzIGluIHRoZSBwcmVyZWdpc3RyYXRpb24uIEF0IHNvbWUgcG9pbnQgd2Ugc2hvdWxkIHRyeSBydW5uaW5nIGV2ZXJ5dGhpbmcgb24gdGhlIHN1YnNldCBvZiBwYXJ0aWNpcGFudHMgd2hvIHBhc3NlZCBhbGwgYXR0ZW50aW9uIGNoZWNrcyBqdXN0IHNvIHRoYXQgd2Uga25vdywgYnV0IHRoaXMgZGVjcmVhc2VzIG91ciBzYW1wbGUgc2l6ZXMgcHJldHR5IGRyYW1hdGljYWxseS5fCgpfQUxTTyBOT1RFOiBJIGluY2x1ZGVkIG9ubHkgdGhlIHNlY29uZCBzYW1wbGUgb2YgR2hhbmFpYW4gcGFydGljaXBhbnRzLCB3aG8gd2VyZSByZWNydWl0ZWQgYWNjb3JkaW5nIHRvIG91ciBzdGFuZGFyZHMgYW5kIGFzIHNwZWNpZmllZCBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLiBGb3IgdGhlIG1vc3QgcGFydCwgYWxsIHJlc3VsdHMgYXJlIHRoZSBzYW1lIHdoZW4gaW5jbHVkaW5nIHRoZSBmdWxsLCAiZG91YmxlIiBzYW1wbGUgb2YgR2hhbmFpYW4gcGFydGljaXBhbnRzLl8KCl9BTFNPIE5PVEU6IEluIFRoYWlsYW5kIHRoaXMgcGFja2V0IHdhcyBtaXNzaW5nIG9uZSBxdWVzdGlvbiBvbiB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZS4gSSBoYXZlIHJlc2NhbGVkIFRoYWkgcGFydGljaXBhbnRzJyBQb3Jvc2l0eSBzY29yZXMgdG8gcnVuIGZyb20gMC0zMiBpbiBvcmRlciB0byBtYXRjaCB0aGUgb3RoZXIgc2l0ZXMuXwoKYGBge3J9CiMgc3RhbmRhcmRpemUsIGNvbGxhcHNpbmcgYWNyb3NzIHBhcnRpY2lwYW50cwpkX3N0ZCA8LSBkMCAlPiUgIyBpbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIG11dGF0ZShzY29yZV9zdGQgPSBzY2FsZShzY29yZSwgc2NhbGUgPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtc2NvcmUpICU+JQogIHNwcmVhZChzY2FsZSwgc2NvcmVfc3RkKQpgYGAKCmBgYHtyfQojIHN0YW5kYXJkaXplLCBjb2xsYXBzaW5nIGFjcm9zcyBwYXJ0aWNpcGFudHMKZF9zdGRfYnlzaXRlIDwtIGQwICU+JSAjIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lICMgZ3JvdXAgYnkgc2l0ZQogIG11dGF0ZShzY29yZV9zdGQgPSBzY2FsZShzY29yZSwgc2NhbGUgPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtc2NvcmUpICU+JQogIHNwcmVhZChzY2FsZSwgc2NvcmVfc3RkKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEh5cG90aGVzaXMgIzEKCl9fSHlwb3RoZXNpcyAjMTogUGVvcGxlIHdobyBzY29yZSBoaWdoZXIgb24gdGhlIFRlbGxlZ2VuIEFic29ycHRpb24gU2NhbGUgKFRlbGxlZ2VuICYgQXRraW5zb24sIDE5NzQpIGFsc28gcmVwb3J0IG1vcmUgc3Bpcml0dWFsIGV4cGVyaWVuY2VzLl9fCgpQcmVyZWdpc3RlcmVkIGFuYWx5c2lzOiAiV2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlLCBjb2xsYXBzaW5nIGFjcm9zcyBmaWVsZCBzaXRlcywgYW5kIHRoZW4gY29uZHVjdCBhIG1peGVkLWVmZmVjdHMgbGluZWFyIHJlZ3Jlc3Npb24sIHVzaW5nIGFic29ycHRpb24gc2NvcmVzIHRvIHByZWRpY3QgcmVwb3J0cyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMsIGFsbG93aW5nIGZvciBkaWZmZXJlbmNlcyBhY3Jvc3Mgb3VyIGZpdmUgZmllbGQgc2l0ZXMgYW5kIGFjcm9zcyB0aGUgdHdvIHNjYWxlcyB3ZSB1c2VkIHRvIG1lYXN1cmUgc3Bpcml0dWFsIGV4cGVyaWVuY2UuIFVzaW5nIHRoZSDigJxsbWU04oCdIHBhY2thZ2UgZm9yIFIgKEJhdGVzLCAyMDE4KSwgd2Ugd2lsbCBzcGVjaWZ5IHRoaXMgbW9kZWwgYXMgZm9sbG93czogZXhwZXJpZW5jZSB+IGFic29ycHRpb24gKiBzaXRlICogc2NhbGUgKyAoMSB8IHN1YmplY3QpLCB3aGVyZSDigJxzY2FsZeKAnSBpcyBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlIGNvbXBhcmluZyB0aGUgdHdvIHNwaXJpdHVhbCBleHBlcmllbmNlIHNjYWxlcyAoZWZmZWN0LWNvZGVkKSwgYW5kIOKAnHNpdGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIGZpdmUgZmllbGQgc2l0ZXMgKGVmZmVjdC1jb2RlZCkuIE91ciBwcmVkaWN0aW9uIGlzIHRoYXQgdGhlIG1haW4gZWZmZWN0IG9mIGFic29ycHRpb24gb24gZXhwZXJpZW5jZSB3aWxsIGJlIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKGIgPiAwLCB0ID4gMiwgcCA8IDAuMDUgdXNpbmcgU2F0dGVydGh3YWl0ZSdzIGRlZ3JlZXMgb2YgZnJlZWRvbSBtZXRob2QgYXMgaW1wbGVtZW50ZWQgaW4gdGhlIOKAnGxtZXJUZXN04oCdIHBhY2thZ2UgZm9yIFIsIEt1em5ldHNvdmEsIEJyb2NraG9mZiwgJiBDaHJpc3RlbnNlbiwgMjAxNykuIChUaGUgcmVzdCBvZiB0aGUgcGFyYW1ldGVycyBpbmNsdWRlZCBpbiB0aGUgbW9kZWwgd2lsbCBiZSBvZiBncmVhdCBpbnRlcmVzdCB0byB1cywgYnV0IGFyZSBleHBsb3JhdG9yeS4pCgpJZiB3ZSBoYXZlIHRyb3VibGUgZml0dGluZyB0aGVzZSBtb2RlbHMgb3IgdGhlcmUgYXJlIG90aGVyIHNpZ25zIG9mIG1vZGVsIGZpdCBwcm9ibGVtcywgd2Ugd2lsbCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIG1vZGVsOiBleHBlcmllbmNlIH4gYWJzb3JwdGlvbiAqIHNjYWxlICsgKDEgfCBzaXRlL3N1YmplY3QpLiIKCkhlcmUgYXJlIG91ciByZXN1bHRzOgoKYGBge3J9CmRfc3RkX2gxIDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UsIGFicykgJT4lCiAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2gxJHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2gxJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyMSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwN19jdHJ5ICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCBkX3N0ZF9oMSkKIyBzdW1tYXJ5KHIxKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0Kc3VtbWFyeShyMSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpoMV9zdW0gPC0gZDAgJT4lIAogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCwgcDdfZHNlX3RvdGFsLCBwN19zZV90b3RhbCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHNjYWxlKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oc2NvcmUpLAogICAgICAgICAgICBzdGRldiA9IHNkKHNjb3JlKSkgJT4lCiAgdW5ncm91cCgpCmgxX3N1bQpgYGAKCioqV2UgZm91bmQgZXZpZGVuY2UgaW4gZmF2b3Igb2YgSHlwb3RoZXNpcyAjMSoqOiBBcyBwcmVkaWN0ZWQsIHRoZSBtYWluIGVmZmVjdCBvZiBhYnNvcnB0aW9uIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIChzZWUgYm9sZGVkIHJvdyBpbiB0YWJsZSBhYm92ZSkuIAoKRm9yIGV2ZXJ5IGluY3JlYXNlIG9mIDEgc3RhbmRhcmQgZGV2aWF0aW9uIGluIGFic29ycHRpb24sIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjEpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNwaXJpdHVhbCBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDFfc3VtJHN0ZGV2W2gxX3N1bSRzY2FsZSA9PSAiYWJzIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEFic29ycHRpb24gc2NhbGUgKHJhbmdlOiAwLTM0KSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgKHN1bW1hcnkocjEpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gKiBoMV9zdW0kc3RkZXZbaDFfc3VtJHNjYWxlID09ICJkc2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSAocmFuZ2U6IDAtNzApIG9yIGByIChzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICogaDFfc3VtJHN0ZGV2W2gxX3N1bSRzY2FsZSA9PSAic2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTgwKS4KCmBgYHtyfQpoMV9wbG90X2EgPC0gZF9zdGRfaDEgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzE6IEJ5IHNpdGUgYW5kIHNjYWxlIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDFfcGxvdF9iIDwtIGRfc3RkX2gxICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzE6IE92ZXJhbGwiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGgxX3Bsb3RfYSwgaDFfcGxvdF9iLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEh5cG90aGVzaXMgIzIKCl9fSHlwb3RoZXNpcyAjMjogUGVvcGxlIHdobyBzY29yZSBoaWdoZXIgb24gb3VyIHR3byBwb3Jvc2l0eSBpbmRpY2VzIGFsc28gcmVwb3J0IG1vcmUgc3Bpcml0dWFsIGV4cGVyaWVuY2VzLl9fCgpQcmVyZWdpc3RlcmVkIGFuYWx5c2lzOiAiV2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlLCBjb2xsYXBzaW5nIGFjcm9zcyBmaWVsZCBzaXRlcywgYW5kIHRoZW4gY29uZHVjdCBhIG1peGVkLWVmZmVjdHMgbGluZWFyIHJlZ3Jlc3Npb24sIHVzaW5nIHBvcm9zaXR5IHNjb3JlcyAoZnJvbSBlYWNoIG9mIG91ciB0d28gaW5kaWNlcykgdG8gcHJlZGljdCByZXBvcnRzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlcyBhY3Jvc3MgdGhlIDIgc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzIGluY2x1ZGVkIGluIG91ciBzdXJ2ZXkgcGFja2V0LCBhbGxvd2luZyBmb3IgZGlmZmVyZW5jZXMgYWNyb3NzIG91ciBmaXZlIGZpZWxkIHNpdGVzIGFuZCBhY3Jvc3MgdGhlIHR3byBzY2FsZXMgd2UgdXNlZCB0byBtZWFzdXJlIHNwaXJpdHVhbCBleHBlcmllbmNlLiBVc2luZyB0aGUg4oCcbG1lNOKAnSBwYWNrYWdlIGZvciBSIChCYXRlcywgMjAxOCksIHdlIHdpbGwgc3BlY2lmeSB0aGlzIG1vZGVsIGFzIGZvbGxvd3M6IGV4cGVyaWVuY2UgfiBwb3Jvc2l0eSAqIHNpdGUgKiBzY2FsZSArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNjYWxl4oCdIGlzIGEgY2F0ZWdvcmljYWwgdmFyaWFibGUgY29tcGFyaW5nIHRoZSB0d28gc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzIChlZmZlY3QtY29kZWQpLCBhbmQg4oCcc2l0ZeKAnSBpcyBhIGNhdGVnb3JpY2FsIHZhcmlhYmxlIGNvbXBhcmluZyB0aGUgZml2ZSBmaWVsZCBzaXRlcyAoZWZmZWN0LWNvZGVkKS4gV2Ugd2lsbCBydW4gdHdvIHZlcnNpb25zIG9mIHRoaXMgbW9kZWwsIG9uZSB1c2luZyBlYWNoIG9mIHRoZSB0d28g4oCccG9yb3NpdHnigJ0gbWVhc3VyZXMgZGVzY3JpYmVkIGFib3ZlLiBGb3IgZWFjaCByZWdyZXNzaW9uLCBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSBtYWluIGVmZmVjdCBvZiBwb3Jvc2l0eSBvbiBleHBlcmllbmNlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSB1c2luZyBTYXR0ZXJ0aHdhaXRlJ3MgZGVncmVlcyBvZiBmcmVlZG9tIG1ldGhvZCBhcyBpbXBsZW1lbnRlZCBpbiB0aGUg4oCcbG1lclRlc3TigJ0gcGFja2FnZSBmb3IgUiwgS3V6bmV0c292YSwgQnJvY2tob2ZmLCAmIENocmlzdGVuc2VuLCAyMDE3KS4gKFRoZSByZXN0IG9mIHRoZSBwYXJhbWV0ZXJzIGluY2x1ZGVkIGluIHRoZSBtb2RlbCB3aWxsIGJlIG9mIGdyZWF0IGludGVyZXN0IHRvIHVzLCBidXQgYXJlIGV4cGxvcmF0b3J5LikKCklmIHdlIGhhdmUgdHJvdWJsZSBmaXR0aW5nIHRoZXNlIG1vZGVscyBvciB0aGVyZSBhcmUgb3RoZXIgc2lnbnMgb2YgbW9kZWwgZml0IHByb2JsZW1zLCB3ZSB3aWxsIGNvbnNpZGVyIHRoZSBmb2xsb3dpbmcgYWx0ZXJuYXRpdmUgbW9kZWw6IGV4cGVyaWVuY2UgfiBwb3Jvc2l0eSAqIHNjYWxlICsgKDEgfCBzaXRlL3N1YmplY3QpLiIKCkhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgUG9yb3NpdHkgc2NhbGUgKER1bGluKToKCmBgYHtyfQpkX3N0ZF9oMiA8LSBkX3N0ZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfaDIkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDIkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIyX3BvciA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBwN19jdHJ5ICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCBkX3N0ZF9oMikKIyBzdW1tYXJ5KHIyX3BvcikKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnN1bW1hcnkocjJfcG9yKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnIyX21tIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogcDdfY3RyeSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgZF9zdGRfaDIpCiMgc3VtbWFyeShyMl9tbSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnN1bW1hcnkocjJfbW0pJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KaDJfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICAgIHA3X2RzZV90b3RhbCwgcDdfc2VfdG90YWwpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpKSAlPiUKICBncm91cF9ieShzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKG1lYW4gPSBtZWFuKHNjb3JlKSwKICAgICAgICAgICAgc3RkZXYgPSBzZChzY29yZSkpICU+JQogIHVuZ3JvdXAoKQpoMl9zdW0KYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzIqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgcG9yb3NpdHkgd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgaW4gYm90aCByZWdyZXNzaW9uIGFuYWx5c2VzIChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9wb3IpJGNvZWZmaWNpZW50c1sicG9yIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNwaXJpdHVhbCBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAicG9yIl0gJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFBvcm9zaXR5IHNjYWxlIChyYW5nZTogMC0zMiksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAqIGgyX3N1bSRzdGRldltoMl9zdW0kc2NhbGUgPT0gImRzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlIChyYW5nZTogMC03MCkgb3IgYHIgKHN1bW1hcnkocjJfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAic2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTgwKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgTWFydGhhIFN0b3J5IHNjYWxlLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciBzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNwaXJpdHVhbCBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDJfc3VtJHN0ZGV2W2gyX3N1bSRzY2FsZSA9PSAibW0iXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgTWFydGhhIFN0b3J5IHNjYWxlIChyYW5nZTogMC01NCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gKiBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJkc2UiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSAocmFuZ2U6IDAtNzApIG9yIGByIChzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gKiBoMl9zdW0kc3RkZXZbaDJfc3VtJHNjYWxlID09ICJzZSJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgU3Bpcml0dWFsIEV2ZW50cyBzY2FsZSAocmFuZ2U6IDAtODApLgoKYGBge3J9CmgyX3Bsb3RfYTEgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcG9yLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBEdWxpbiBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDJfcGxvdF9iMSA8LSBkX3N0ZF9oMiAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwb3IsIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDJfcGxvdF9hMSwgaDJfcGxvdF9iMSwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYTIgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjMjogQnkgc2l0ZSBhbmQgc2NhbGUgKHVzaW5nIE1hcnRoYSBTdG9yeSBzY2FsZSkiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjIgPC0gZF9zdGRfaDIgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KcGxvdF9ncmlkKGgyX3Bsb3RfYTIsIGgyX3Bsb3RfYjIsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgSHlwb3RoZXNpcyAjMwoKX19IeXBvdGhlc2lzICMzOiBUaGUgcG9zaXRpdmUgcmVsYXRpb25zaGlwIGJldHdlZW4gYWJzb3JwdGlvbiBhbmQgZXhwZXJpZW5jZSBpcyBzdGF0aXN0aWNhbGx5IHNpZ25pZmljYW50IGluIGVhY2ggZmllbGQgc2l0ZSBpbmRpdmlkdWFsbHkuX18KClByZXJlZ2lzdGVyZWQgYW5hbHlzaXM6ICJGb3IgZWFjaCBvZiBvdXIgZml2ZSBmaWVsZCBzaXRlcywgd2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlIChjb25zaWRlcmluZyBvbmx5IHBhcnRpY2lwYW50cyBmcm9tIHRoYXQgZmllbGQgc2l0ZSksIGFuZCB0aGVuIGNvbmR1Y3QgdGhlIHNhbWUgYW5hbHlzZXMgc3BlY2lmaWVkIGFib3ZlIGZvciBbSHlwb3RoZXNpcyAjMV0gdG8gYXNzZXNzIHRoZSByZWxhdGlvbnNoaXBbXSBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIFsuLi5dIGluIGVhY2ggZmllbGQgc2l0ZSBpbmRpdmlkdWFsbHkuIEZvciBIeXBvdGhlc2lzICMzLCBvdXIgbW9kZWxzIHdpbGwgdGFrZSB0aGUgZm9sbG93aW5nIGZvcm06IGV4cGVyaWVuY2UgfiBhYnNvcnB0aW9uICogc2NhbGUgKyAoMSB8IHN1YmplY3QpLiBbLi4uXSBBZ2Fpbiwgb3VyIHByZWRpY3Rpb24gaXMgdGhhdCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiBvbiBleHBlcmllbmNlIGFuZCBvZiBlYWNoIHBvcm9zaXR5IG1lYXN1cmUgb24gZXhwZXJpZW5jZSB3aWxsIGJlIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKGIgPiAwLCBwIDwgMC4wNSkuIgoKSGVyZSBhcmUgb3VyIHJlc3VsdHM6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX2gxIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlLCBhYnMpICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX3N0ZF9ieXNpdGVfaDEkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCmBgYHtyfQpyM191cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyM191cykKYGBgCgpgYGB7cn0KcjNfZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjNfZ2gpCmBgYAoKYGBge3J9CnIzX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHIzX3RoKQpgYGAKCmBgYHtyfQpyM19jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyM19jaCkKYGBgCgpgYGB7cn0KcjNfdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDEgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyM192dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnJiaW5kKHN1bW1hcnkocjNfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHIzX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyM190aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjNfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHIzX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgoqKldlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzMgaW4gYWxsIHNpdGVzIF9leGNlcHRfIFZhbnVhdHUqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiB0aGUgVVMsIEdoYW5hLCBUaGFpbGFuZCwgYW5kIENoaW5h4oCUYnV0IHRoaXMgd2FzIG5vdCB0aGUgY2FzZSBpbiBWYW51YXR1IChhbHRob3VnaCBzb21lIHdvdWxkIGNvbnNpZGVyIHRoZSBlZmZlY3QgIm1hcmdpbmFsbHkgc2lnbmlmaWNhbnQiOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpnZ3Bsb3QoZF9zdGRfYnlzaXRlX2gxICU+JQogICAgICAgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIikpLCAKICAgICAgIGFlcyh4ID0gYWJzLCB5ID0gZXhwZXJpZW5jZSwgY29sb3IgPSBwN19jdHJ5KSkgKyAKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKyAKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArIAogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICMzIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKKFNlZSBvdGhlciByZWxldmFudCBwbG90cyB1bmRlciAiSHlwb3RoZXNpcyAjMSwiIGFib3ZlLikKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEh5cG90aGVzaXMgIzQKCl9fSHlwb3RoZXNpcyAjNDogVGhlIHBvc2l0aXZlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gYW5kIGV4cGVyaWVuY2UgaXMgc3RhdGlzdGljYWxseSBzaWduaWZpY2FudCBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5Ll9fCgpQcmVyZWdpc3RlcmVkIGFuYWx5c2lzOiAiRm9yIGVhY2ggb2Ygb3VyIGZpdmUgZmllbGQgc2l0ZXMsIHdlIHdpbGwgc3RhbmRhcmRpemUgc2NvcmVzIG9uIGVhY2ggbWVhc3VyZSAoY29uc2lkZXJpbmcgb25seSBwYXJ0aWNpcGFudHMgZnJvbSB0aGF0IGZpZWxkIHNpdGUpLCBhbmQgdGhlbiBjb25kdWN0IHRoZSBzYW1lIGFuYWx5c2VzIHNwZWNpZmllZCBhYm92ZSBmb3IgW0h5cG90aGVzaXMgIzJdIHRvIGFzc2VzcyB0aGUgcmVsYXRpb25zaGlwWy4uLl0gYmV0d2VlbiBwb3Jvc2l0eSBhbmQgZXhwZXJpZW5jZSBpbiBlYWNoIGZpZWxkIHNpdGUgaW5kaXZpZHVhbGx5LiBbLi4uXSBGb3IgSHlwb3RoZXNpcyAjNCwgb3VyIG1vZGVscyB3aWxsIHRha2UgdGhlIGZvbGxvd2luZyBmb3JtOiBleHBlcmllbmNlIH4gcG9yb3NpdHkgKiBzY2FsZSArICgxIHwgc3ViamVjdCkuIFsuLi5dIEFnYWluLCBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSBtYWluIGVmZmVjdCBvZiBhYnNvcnB0aW9uIG9uIGV4cGVyaWVuY2UgYW5kIG9mIGVhY2ggcG9yb3NpdHkgbWVhc3VyZSBvbiBleHBlcmllbmNlIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHAgPCAwLjA1KS4iCgpIZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIFBvcm9zaXR5IHNjYWxlIChEdWxpbik6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX2g0IDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2g0JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNCRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjRfcG9yX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X3Bvcl91cykKYGBgCgpgYGB7cn0KcjRfcG9yX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X3Bvcl9naCkKYGBgCgpgYGB7cn0KcjRfcG9yX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X3Bvcl90aCkKYGBgCgpgYGB7cn0KcjRfcG9yX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X3Bvcl9jaCkKYGBgCgpgYGB7cn0KcjRfcG9yX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2g0ICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KcmJpbmQoc3VtbWFyeShyNF9wb3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X3Bvcl9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9wb3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X3Bvcl92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKVXNpbmcgdGhlIFBvcm9zaXR5IHNjYWxlLCAqKldlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzQgaW4gYWxsIHNpdGVzKio6IEFzIHByZWRpY3RlZCwgdGhlIG1haW4gZWZmZWN0IG9mIHBvcm9zaXR5IHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIHRoZSBVUywgR2hhbmEsIFRoYWlsYW5kLCBDaGluYSwgYW5kIFZhbnVhdHUgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CmRfc3RkX2J5c2l0ZV9oNCAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwb3IsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNCAodXNpbmcgUG9yb3NpdHkgc2NhbGUpIiwKICAgICAgIHggPSAiUG9yb3NpdHkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnI0X21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjRfbW1fdXMpCmBgYAoKYGBge3J9CnI0X21tX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjRfbW1fZ2gpCmBgYAoKYGBge3J9CnI0X21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjRfbW1fdGgpCmBgYAoKYGBge3J9CnI0X21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjRfbW1fY2gpCmBgYAoKYGBge3J9CnI0X21tX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDQgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNF9tbV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnJiaW5kKHN1bW1hcnkocjRfbW1fdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X21tX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNF9tbV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjRfbW1fY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X21tX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpVc2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlLCAqKldlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzQgaW4gYWxsIHNpdGVzIF9leGNlcHRfIFZhbnVhdHUqKjogQXMgcHJlZGljdGVkLCB0aGUgbWFpbiBlZmZlY3Qgb2YgTWFydGhhIFN0b3J5IHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIHRoZSBVUywgR2hhbmEsIFRoYWlsYW5kLCBhbmQgQ2hpbmHigJRidXQgdGhpcyB3YXMgbm90IHRoZSBjYXNlIGluIFZhbnVhdHUgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CmRfc3RkX2J5c2l0ZV9oNCAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM0ICh1c2luZyBNYXJ0aGEgU3Rvcnkgc2NhbGUpIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJIeXBvdGhlc2lzICMyLCIgYWJvdmUuKQoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBTZWNvbmRhcnkgZXhwbG9yYXRvcnkgYW5hbHlzZXMKCiMjICJTZWN1bGFyIiBleHBlcmllbmNlcwoKRnJvbSBwcmVyZWdpc3RyYXRpb246ICJGaXJzdCwgaW4gb3JkZXIgdG8gZXhwbG9yZSB0aGUgcXVlc3Rpb24gb2Ygd2hldGhlciBhZmZpcm1hdGlvbiBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSwgcG9yb3NpdHkgYW5kIGFic29ycHRpb24gYXJlIHNpbXBseSBkdWUgdG8gdGhlIHJlbGlnaW9zaXR5IG9mIHBhcnRpY2lwYW50cywgd2Ugd2lsbCBjb25kdWN0IGFkZGl0aW9uYWwgYW5hbHlzZXMgZm9jdXNpbmcgb24gdGhlIHR3byDigJxzZWN1bGFy4oCdIGV4cGVyaWVuY2Ugc2NhbGVzICh0aGUgcmV2aXNlZCBMYXVuYXkgU2xhZGUgc2NhbGUsIE1vcnJpc29uLCBXZWxscyBhbmQgTm90aGFyZCAyMDAwXTsgYW5kIHRoZSBTaGVlcC1Hb2F0IFtwYXJhbm9ybWFsXSBzY2FsZSwgVGhhbGJvcm5lICYgRGVsaW4sIDE5OTMpLiBUaGVzZSBhbmFseXNlcyB3aWxsIGJlIGlkZW50aWNhbCB0byB0aGUgcHJpbWFyeSBhbmFseXNlcyBvdXRsaW5lZCBhYm92ZSwgZXhjZXB0IHRoYXQgdGhleSB3aWxsIG9ubHkgaW5jbHVkZSB0aGVzZSB0d28g4oCcc2VjdWxhciBleHBlcmllbmNl4oCdIHNjYWxlcyBhbmQgbm90IHRoZSB0d28gc3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NhbGVzLiBXZSBjb25zaWRlciB0aGVzZSB0byBiZSBleHBsb3JhdG9yeSBhbmFseXNlcy4iCgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMQoKYGBge3J9CmRfc3RkX2gxX3NlYyA8LSBkX3N0ZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2gxX3NlYyRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oMV9zZWMkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIxX3NlYyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwN19jdHJ5ICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgZF9zdGRfaDFfc2VjKQojIHN1bW1hcnkocjFfc2VjKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0Kc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyLCBib2xkID0gVCkKYGBgCgpgYGB7cn0KaDFfc2VjX3N1bSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSkpICU+JQogIGdyb3VwX2J5KHNjYWxlKSAlPiUKICBzdW1tYXJpc2UobWVhbiA9IG1lYW4oc2NvcmUpLAogICAgICAgICAgICBzdGRldiA9IHNkKHNjb3JlKSkgJT4lCiAgdW5ncm91cCgpCmgxX3NlY19zdW0KYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxLCAqKnRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgYWxzbyBzaWduaWZpY2FudGx5IHBvc2l0aXZlKiogKHNlZSBib2xkZWQgcm93IHRhYmxlIGFib3ZlKS4KCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBhYnNvcnB0aW9uLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciBzdW1tYXJ5KHIxX3NlYykkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgIHN0YW5kYXJkIGRldmlhdGlvbnMgaW4gdGhlaXIgc2VjdWxhciBleHBlcmllbmNlcy4gSW4gY29uY3JldGUgdGVybXMsIHRoaXMgbWVhbnMgdGhhdCBmb3IgZXZlcnkgaW5jcmVhc2Ugb2YgYHIgaDFfc2VjX3N1bSRzdGRldltoMV9zZWNfc3VtJHNjYWxlID09ICJhYnMiXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgQWJzb3JwdGlvbiBzY2FsZSAocmFuZ2U6IDAtMzQpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMV9zZWMpJGNvZWZmaWNpZW50c1siYWJzIiwgIkVzdGltYXRlIl0gKiBoMV9zZWNfc3VtJHN0ZGV2W2gxX3NlY19zdW0kc2NhbGUgPT0gInVuZXYiXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIFVuY29tbW9uIEV2ZW50cyBzY2FsZSAocmFuZ2U6IDAtMTgpIG9yIGByIChzdW1tYXJ5KHIxX3NlYykkY29lZmZpY2llbnRzWyJhYnMiLCAiRXN0aW1hdGUiXSAqIGgxX3NlY19zdW0kc3RkZXZbaDFfc2VjX3N1bSRzY2FsZSA9PSAiZXhzZW4iXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEV4dHJhc2Vuc29yeSBzY2FsZSAocmFuZ2U6IDAtNykuCgpUaGlzIHdhcyBhY3R1YWxseSBhIChudW1lcmljYWxseSkgX3N0cm9uZ2VyXyBlZmZlY3QgdGhhbiB3aGF0IHdlIGRvY3VtZW50ZWQgZm9yIHNwaXJpdHVhbCBleHBlcmllbmNlcyAoYiA9IGByIHN1bW1hcnkocjFfc2VjKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIxKSRjb2VmZmljaWVudHNbImFicyIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWApLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyfQpoMV9zZWNfcGxvdF9hIDwtIGRfc3RkX2gxX3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxOiBCeSBzaXRlIGFuZCBzY2FsZSIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiKQpgYGAKCmBgYHtyfQpoMV9zZWNfcGxvdF9iIDwtIGRfc3RkX2gxX3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzE6IE92ZXJhbGwiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMV9zZWNfcGxvdF9hLCBoMV9zZWNfcGxvdF9iLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIyBQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMyCgpIZXJlIGFyZSBvdXIgcmVzdWx0cywgdXNpbmcgdGhlIFBvcm9zaXR5IHNjYWxlIChEdWxpbik6CgpgYGB7cn0KZF9zdGRfaDJfc2VjIDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHVuZXYsIGV4c2VuLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2gyX3NlYyRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oMl9zZWMkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnIyX3NlY19wb3IgPC0gbG1lcihleHBlcmllbmNlIH4gcG9yICogcDdfY3RyeSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICBkX3N0ZF9oMl9zZWMpCiMgc3VtbWFyeShyMl9zZWNfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0Kc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMiwgYm9sZCA9IFQpCmBgYAoKQW5kIGhlcmUgYXJlIG91ciByZXN1bHRzLCB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOgoKYGBge3J9CnIyX3NlY19tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX3N0ZF9oMl9zZWMpCiMgc3VtbWFyeShyMl9zZWNfbW0pCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDIsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpoMl9zZWNfc3VtIDwtIGQwICU+JSAKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICAgIHA3X3VuZXZfdG90YWwsIHA3X2V4c2VuX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSkgJT4lCiAgZ3JvdXBfYnkoc2NhbGUpICU+JQogIHN1bW1hcmlzZShtZWFuID0gbWVhbihzY29yZSksCiAgICAgICAgICAgIHN0ZGV2ID0gc2Qoc2NvcmUpKSAlPiUKICB1bmdyb3VwKCkKaDJfc2VjX3N1bQpgYGAKCkluIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzIsIGluIGJvdGggY2FzZXMsICoqdGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSoqIChzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGVzIGFib3ZlKS4gCgpGb3IgZXZlcnkgaW5jcmVhc2Ugb2YgMSBzdGFuZGFyZCBkZXZpYXRpb24gaW4gcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgcGFydGljaXBhbnRzIChvbiBhdmVyYWdlKSBpbmNyZWFzZWQgYnkgYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgc3RhbmRhcmQgZGV2aWF0aW9ucyBpbiB0aGVpciBzZWN1bGFyIGV4cGVyaWVuY2VzLiBJbiBjb25jcmV0ZSB0ZXJtcywgdGhpcyBtZWFucyB0aGF0IGZvciBldmVyeSBpbmNyZWFzZSBvZiBgciBoMl9zZWNfc3VtJHN0ZGV2W2gyX3NlY19zdW0kc2NhbGUgPT0gInBvciJdICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBQb3Jvc2l0eSBzY2FsZSAocmFuZ2U6IDAtMzIpLCBwYXJ0aWNpcGFudHMgKG9uIGF2ZXJhZ2UpIGluY3JlYXNlZCBieSBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJleHNlbiJdKSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgRXh0cmFzZW5zb3J5IHNjYWxlIChyYW5nZTogMC03KS4KCkZvciBldmVyeSBpbmNyZWFzZSBvZiAxIHN0YW5kYXJkIGRldmlhdGlvbiBpbiBwb3Jvc2l0eSBhcyBpbmRleGVkIGJ5IHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGUsIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIHN1bW1hcnkocjJfc2VjX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCBzdGFuZGFyZCBkZXZpYXRpb25zIGluIHRoZWlyIHNlY3VsYXIgZXhwZXJpZW5jZXMuIEluIGNvbmNyZXRlIHRlcm1zLCB0aGlzIG1lYW5zIHRoYXQgZm9yIGV2ZXJ5IGluY3JlYXNlIG9mIGByIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAibW0iXSAlPiUgcm91bmQoMilgIHBvaW50cyBvbiB0aGUgTWFydGhhIFN0b3J5IHNjYWxlIChyYW5nZTogMC01NCksIHBhcnRpY2lwYW50cyAob24gYXZlcmFnZSkgaW5jcmVhc2VkIGJ5IGByIChzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICogaDJfc2VjX3N1bSRzdGRldltoMl9zZWNfc3VtJHNjYWxlID09ICJ1bmV2Il0pICU+JSByb3VuZCgyKWAgcG9pbnRzIG9uIHRoZSBVbmNvbW1vbiBFdmVudHMgc2NhbGUgKHJhbmdlOiAwLTE4KSBvciBgciAoc3VtbWFyeShyMl9zZWNfbW0pJGNvZWZmaWNpZW50c1sibW0iLCAiRXN0aW1hdGUiXSAqIGgyX3NlY19zdW0kc3RkZXZbaDJfc2VjX3N1bSRzY2FsZSA9PSAiZXhzZW4iXSkgJT4lIHJvdW5kKDIpYCBwb2ludHMgb24gdGhlIEV4dHJhc2Vuc29yeSBzY2FsZSAocmFuZ2U6IDAtNykuCgpUaGVzZSB3ZXJlIGFjdHVhbGx5IChudW1lcmljYWxseSkgX3N0cm9uZ2VyXyBlZmZlY3RzIHRoYW4gd2hhdCB3ZSBkb2N1bWVudGVkIGZvciBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKFBvcm9zaXR5OiBiID0gYHIgc3VtbWFyeShyMl9zZWNfcG9yKSRjb2VmZmljaWVudHNbInBvciIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX3BvcikkY29lZmZpY2llbnRzWyJwb3IiLCAiRXN0aW1hdGUiXSAlPiUgcm91bmQoMilgOyBNYXJ0aGEgU3Rvcnk6IGIgPSBgciBzdW1tYXJ5KHIyX3NlY19tbSkkY29lZmZpY2llbnRzWyJtbSIsICJFc3RpbWF0ZSJdICU+JSByb3VuZCgyKWAgdnMuIGIgPSBgciBzdW1tYXJ5KHIyX21tKSRjb2VmZmljaWVudHNbIm1tIiwgIkVzdGltYXRlIl0gJT4lIHJvdW5kKDIpYCkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3J9CmgyX3Bsb3RfYTEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIGh5cG90aGVzaXMgIzI6IEJ5IHNpdGUgYW5kIHNjYWxlICh1c2luZyBEdWxpbiBQb3Jvc2l0eSBzY2FsZSkiLAogICAgICAgeCA9ICJQb3Jvc2l0eSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjEgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gaHlwb3RoZXNpcyAjMjogT3ZlcmFsbCIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2ExLCBoMl9wbG90X2IxLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgpgYGB7cn0KaDJfcGxvdF9hMiA8LSBkX3N0ZF9oMl9zZWMgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gbW0sIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIk1hcnRoYSBTdG9yeSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9CmgyX3Bsb3RfYjIgPC0gZF9zdGRfaDJfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IG1tLCB5ID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiU2VjdWxhciBwYXJhbGxlbCB0byBoeXBvdGhlc2lzICMyOiBPdmVyYWxsIiwKICAgICAgIHggPSAiTWFydGhhIFN0b3J5IHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU2VjdWxhciBleHBlcmllbmNlIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoMl9wbG90X2EyLCBoMl9wbG90X2IyLCByZWxfd2lkdGhzID0gYygyLCAxKSkKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIyBQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzCgpIZXJlIGFyZSBvdXIgcmVzdWx0czoKCmBgYHtyfQpkX3N0ZF9ieXNpdGVfaDFfc2VjIDwtIGRfc3RkX2J5c2l0ZSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCB1bmV2LCBleHNlbiwgYWJzKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oMV9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2gxX3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjNfc2VjX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyM19zZWNfdXMpCmBgYAoKYGBge3J9CnIzX3NlY19naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjNfc2VjX2doKQpgYGAKCmBgYHtyfQpyM19zZWNfdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDFfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHIzX3NlY190aCkKYGBgCgpgYGB7cn0KcjNfc2VjX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgZF9zdGRfYnlzaXRlX2gxX3NlYyAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyM19zZWNfY2gpCmBgYAoKYGBge3J9CnIzX3NlY192dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyM19zZWNfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpyYmluZChzdW1tYXJ5KHIzX3NlY191cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyM19zZWNfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHIzX3NlY19jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjNfc2VjX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICMzLCAqKnRoZSByZWxhdGlvbnNoaXAgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBfc2VjdWxhcl8gZXhwZXJpZW5jZSB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBfYWxsXyBzaXRlcyoqLCBpbmNsdWRpbmcgVmFudWF0dSAod2hlcmUgdGhlIHJlbGF0aW9uc2hpcCB3aXRoIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfc3RkX2J5c2l0ZV9oMV9zZWMgJT4lCiAgICAgICAgIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiKSksIAogICAgICAgYWVzKHggPSBhYnMsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArIAogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArIAogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsgCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNlY3VsYXIgcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjMyIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMxLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyMgUGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNAoKYGBge3J9CmRfc3RkX2J5c2l0ZV9oNF9zZWMgPC0gZF9zdGRfYnlzaXRlICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHVuZXYsIGV4c2VuLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGModW5ldiwgZXhzZW4pKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBmYWN0b3Ioc2NhbGUpKQoKY29udHJhc3RzKGRfc3RkX2J5c2l0ZV9oNF9zZWMkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfYnlzaXRlX2g0X3NlYyRwN19jdHJ5KSA8LSBjb250ci5zdW0oNSkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl91cyA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl91cykKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl9jaCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjRfc2VjX3Bvcl9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX3Bvcl92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgIGRfc3RkX2J5c2l0ZV9oNF9zZWMgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KcmJpbmQoc3VtbWFyeShyNF9zZWNfcG9yX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfcG9yX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA0KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDUsIDgpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgOSwgMTIpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMTMsIDE2KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgMTcsIDIwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCAxOCwgNCkpLCBib2xkID0gVCkKYGBgCgpJbiBwYXJhbGxlbCB0byBIeXBvdGhlc2lzICM0LCB1c2luZyB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIF9hbGxfIHNpdGVzKiosIGluY2x1ZGluZyBWYW51YXR1ICh3aGVyZSB0aGUgcmVsYXRpb25zaGlwIHdpdGggc3Bpcml0dWFsIGV4cGVyaWVuY2Ugd2FzIF9ub3RfIHNpZ25pZmljYW50bHkgcG9zaXRpdmU7IHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZSBhYm92ZSkuIFdlIGRpZCBub3QgcHJvdmlkZSBhIHByZWRpY3Rpb24gYWJvdXQgd2hldGhlciBvciBub3QgdGhpcyB3b3VsZCBiZSB0aGUgY2FzZSBpbiB0aGUgcHJlcmVnaXN0cmF0aW9uLgoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZShzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHBvciwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIFBvcm9zaXR5IHNjYWxlKSIsCiAgICAgICB4ID0gIlBvcm9zaXR5IHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTZWN1bGFyIGV4cGVyaWVuY2Ugc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMsIHVzaW5nIHRoZSBNYXJ0aGEgU3Rvcnkgc2NhbGU6CgpgYGB7cn0KcjRfc2VjX21tX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV91cykKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9naCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV90aCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI0X3NlY19tbV9jaCkKYGBgCgpgYGB7cn0KcjRfc2VjX21tX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICBkX3N0ZF9ieXNpdGVfaDRfc2VjICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjRfc2VjX21tX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KcmJpbmQoc3VtbWFyeShyNF9zZWNfbW1fdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjRfc2VjX21tX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNF9zZWNfbW1fY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI0X3NlY19tbV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgNCkgJT4lCiAgZ3JvdXBfcm93cygiR2hhbmEiLCA1LCA4KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDksIDEyKSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDEzLCAxNikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDE3LCAyMCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMTgsIDQpKSwgYm9sZCA9IFQpCmBgYAoKSW4gcGFyYWxsZWwgdG8gSHlwb3RoZXNpcyAjNCwgdXNpbmcgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSwgKip0aGUgcmVsYXRpb25zaGlwIGJldHdlZW4gcG9yb3NpdHkgYW5kIF9zZWN1bGFyXyBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlIGluIGFsbCBzaXRlcyBfZXhjZXB0XyBWYW51YXR1KiogKHdoZXJlIHRoZSByZWxhdGlvbnNoaXAgd2l0aCBzcGlyaXR1YWwgZXhwZXJpZW5jZSB3YXMgYWxzbyBfbm90XyBzaWduaWZpY2FudGx5IHBvc2l0aXZlOyBzZWUgYm9sZGVkIHJvd3MgaW4gdGFibGUgYWJvdmUpLiBXZSBkaWQgbm90IHByb3ZpZGUgYSBwcmVkaWN0aW9uIGFib3V0IHdoZXRoZXIgb3Igbm90IHRoaXMgd291bGQgYmUgdGhlIGNhc2UgaW4gdGhlIHByZXJlZ2lzdHJhdGlvbi4KCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX2g0X3NlYyAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBtbSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC41LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3Ntb290aChtZXRob2QgPSAibG0iLCBjb2xvciA9ICJibGFjayIsIGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTZWN1bGFyIHBhcmFsbGVsIHRvIEh5cG90aGVzaXMgIzQgKHVzaW5nIE1hcnRoYSBTdG9yeSBzY2FsZSkiLAogICAgICAgeCA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIsCiAgICAgICB5ID0gIlNlY3VsYXIgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIikKYGBgCgooU2VlIG90aGVyIHJlbGV2YW50IHBsb3RzIHVuZGVyICJQYXJhbGxlbCB0byBIeXBvdGhlc2lzICMyLCIgYWJvdmUuKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyAiQ29udHJvbCIgc2NhbGVzIChIeXBvdGhlc2lzICM1KQoKRnJvbSBwcmVyZWdpc3RyYXRpb246ICJTZWNvbmQsIGluIG9yZGVyIHRvIGV4YW1pbmUgd2hldGhlciB0aGUgaHlwb3RoZXNpemVkIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBleHBlcmllbmNlIGFuZCBiZXR3ZWVuIHBvcm9zaXR5IGFuZCBleHBlcmllbmNlIGNhbiBiZSBleHBsYWluZWQgYnkgYSBsb3dlci1sZXZlbCBwcm9jZXNzZXPigJRuYW1lbHksIGluZGl2aWR1YWwgb3IgY3Jvc3MtY3VsdHVyYWwgZGlmZmVyZW5jZXMgaW4gYW4gb3ZlcmFsbCB0ZW5kZW5jeSB0byBhZ3JlZSB3aXRoIHRoZSBxdWVzdGlvbnMgcG9zZWQgYnkgdGhlc2Ugc2NhbGVzIChpLmUuLCBhIOKAnHllc+KAnSBiaWFzKSwgd2Ugd2lsbCBhbHNvIGV4YW1pbmUgdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiB0aGUgdHdvIOKAnGNvbnRyb2zigJ0gc2NhbGVzICh0aGUgU2Vuc2Ugb2YgQ29udHJvbCBzY2FsZSwgTGFjaG1hbiAmIFdlYXZlciwgMTk5ODsgYW5kIHRoZSBOZWVkIGZvciBDb2duaXRpb24gc2NhbGUsIENhY2lvcHBvLCBQZXR0eSwgJiBLYW8sIDE5OTMpIGFuZCBvdXIgbWVhc3VyZXMgb2YgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUaGlzIHByb3ZpZGVzIHNvbWV0aGluZyBvZiBhIG5lZ2F0aXZlIGNvbnRyb2wgZm9yIG91ciBwcmltYXJ5IGh5cG90aGVzZXMuIE91ciBwcmVkaWN0aW9uIGlzIHRoYXQgYW55IHJlbGF0aW9uc2hpcHMgd2l0aCB0aGVzZSBjb250cm9sIG1lYXN1cmVzIHdpbGwgYmUgd2Vha2VyIHRoYW4gdGhlIHJlbGF0aW9uc2hpcHMgYW1vbmcgYWJzb3JwdGlvbiwgcG9yb3NpdHksIGFuZCBleHBlcmllbmNlLiBUbyBhc3Nlc3MgdGhpcywgd2Ugd2lsbCBzdGFuZGFyZGl6ZSBzY29yZXMgb24gZWFjaCBtZWFzdXJlLCBjb2xsYXBzaW5nIGFjcm9zcyBmaWVsZCBzaXRlcywgYW5kIHRoZW4gY29uZHVjdCBhIG1peGVkLWVmZmVjdHMgbGluZWFyIHJlZ3Jlc3Npb24sIHVzaW5nIHNjb3JlcyBvbiBhYnNvcnB0aW9uLCBwb3Jvc2l0eSwgYW5kIGNvbnRyb2wgc2NhbGVzIHRvIHByZWRpY3QgcmVwb3J0cyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIFVzaW5nIHRoZSDigJxzdGF0c+KAnSBwYWNrYWdlIGZvciBSLCB3ZSB3aWxsIHNwZWNpZnkgdGhpcyBtb2RlbCBhcyBmb2xsb3dzOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKiBzaXRlICArICgxIHwgc3ViamVjdCksIHdoZXJlIOKAnHNpdGXigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSBjb21wYXJpbmcgdGhlIGZpdmUgZmllbGQgc2l0ZXMgKGVmZmVjdC1jb2RlZCksIGFuZOKAlGNyaXRpY2FsbHnigJTigJxwcmVkaWN0b3LigJ0gaXMgYSBjYXRlZ29yaWNhbCB2YXJpYWJsZSB3aXRoIHRoZSBmb2xsb3dpbmcgb3J0aG9nb25hbCBjb250cmFzdHM6ICgxKSBTY2FsZXMgb2YgaW50ZXJlc3QgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHZzLiBjb250cm9sIHNjYWxlczsgKDIpIGFic29ycHRpb24gdnMuIHBvcm9zaXR5IG1lYXN1cmVzOyAoMykgcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgRHVsaW4gc2NhbGUgdnMuIHBvcm9zaXR5IGFzIGluZGV4ZWQgYnkgdGhlIE1lbnRhbCBDYXVzYXRpb24gc2NhbGU7ICg0KSBOZWVkIGZvciBDb2duaXRpb24gdnMuIE5lZWQgZm9yIENvbnRyb2wgKE1hc3RlcnkgU3Vic2NhbGUpLiBCZWNhdXNlIG9mIHRoZSB1bnVzdWFsIGFuZCBjb21wbGV4IGZvcm11bGF0aW9uIG9mIHRoaXMgbW9kZWzigJRjb25zaWRlcmluZyBlYWNoIG9mIHRoZXNlIDUg4oCccHJlZGljdG9yc+KAnSBhcyByZXBlYXRlZCBvYnNlcnZhdGlvbnMgb2YgdGhlIHZhcmlhYmxlIOKAnHNjb3Jl4oCd4oCUd2Ugd2lsbCBjb25kdWN0IHNlcGFyYXRlIG1vZGVscyBmb3IgdGhlIHR3byBzcGlyaXR1YWwgZXhwZXJpZW5jZSBzY2FsZXMgKERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBhbmQgU3Bpcml0dWFsIEV2ZW50cyksIHJhdGhlciB0aGFuIGluY29ycG9yYXRpbmcgYm90aCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgbWVhc3VyZXMgaW50byB0aGUgc2FtZSBtb2RlbCAoYXMgaW4gSHlwb3RoZXNlcyAjMS00KS4gQXMgaW4gSHlwb3RoZXNlcyAjMS00LCBpZiB3ZSBoYXZlIHRyb3VibGUgZml0dGluZyB0aGVzZSBtb2RlbHMgb3IgdGhlcmUgYXJlIG90aGVyIHNpZ25zIG9mIG1vZGVsIGZpdCBwcm9ibGVtcywgd2Ugd2lsbCBjb25zaWRlciB0aGUgZm9sbG93aW5nIGFsdGVybmF0aXZlIG1vZGVsOiBleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKyAoMSB8IHNpdGUvc3ViamVjdCkuIFdlIGNvbnNpZGVyIHRoZXNlIHRvIGJlIGNvbmZpcm1hdG9yeSB0ZXN0cywgYW5kIGluIGVhY2ggY2FzZSBvdXIgcHJlZGljdGlvbiBpcyB0aGF0IHRoZSB0d28td2F5IGludGVyYWN0aW9uIGJldHdlZW4g4oCcc2NvcmXigJ0gYW5kIHRoZSBmaXJzdCBvcnRob2dvbmFsIGNvbnRyYXN0IG9uIOKAnHByZWRpY3RvcuKAnSAoY29tcGFyaW5nIHRoZSBwcmVkaWN0aXZlIHBvd2VyIG9mIG91ciBzY2FsZXMgb2YgaW50ZXJlc3QgdnMuIG91ciB0d28gY29udHJvbCBzY2FsZXMpIHdpbGwgYmUgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoYiA+IDAsIHQgPiAyLCBwIDwgMC4wNSkuIgoKQWx0aG91Z2ggd2UgZGlkIG5vdCBudW1iZXIgdGhpcyBoeXBvdGhlc2lzIGluIHRoZSBwcmVyZWdpc3RyYXRpb24sIEknbSBnb2luZyB0byBnbyBhaGVhZCBhbmQgY2FsbCBpdCBIeXBvdGhlc2lzICM1LgoKYGBge3J9CmRfc3RkX2g1IDwtIGZ1bGxfam9pbigKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogICAgZ2F0aGVyKHNjYWxlLCBleHBlcmllbmNlLCBjKGRzZSwgc2UpKSwKICBkX3N0ZCAlPiUKICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSwgaHRoaywgd29iKSAlPiUKICAgIGdhdGhlcihwcmVkaWN0b3IsIHNjb3JlLCBjKGFicywgcG9yLCBtbSwgaHRoaywgd29iKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpjb250cmFzdHMoZF9zdGRfaDUkcHJlZGljdG9yKSA8LSBjYmluZChpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wbW0gPSBjKDIsIDAsIC0xLCAtMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCl9OT1RFOiBOZWl0aGVyIG9mIHRoZSBtb2RlbHMgd2Ugc3BlY2lmaWVkIGluIHRoZSBwcmVyZWdpc3RyYXRpb24gd2VyZSBhYmxlIHRvIHJ1bi4gSSB0aGluayB0aGlzIGlzIGR1ZSB0byBhbiBlcnJvciBpbiBteSB0aGlua2luZyAoYWJvdXQgd2hpY2ggb2Ygb3VyIG1lYXN1cmVzIHdlcmUgInJlcGVhdGVkIG1lYXN1cmVzIikuIFRoZSBtb2RlbHMgcmVwb3J0ZWQgaGVyZSBhcmUgdmVyeSBjbG9zZSB0byB3aGF0IHdlIHByZXJlZ2lzdGVyZWQuXwoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZTogCgpgYGB7cn0KcjVfZHNlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgZF9zdGRfaDUgJT4lIGZpbHRlcihzY2FsZSA9PSAiZHNlIikpCiMgc3VtbWFyeShyNV9kc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpzdW1tYXJ5KHI1X2RzZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGU6IAoKYGBge3J9CnI1X3NlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgZF9zdGRfaDUgJT4lIGZpbHRlcihzY2FsZSA9PSAic2UiKSkKIyBzdW1tYXJ5KHI1X3NlKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0Kc3VtbWFyeShyNV9zZSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDExLCBib2xkID0gVCkKYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzUqKjogQXMgcHJlZGljdGVkLCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAic2NvcmUiIGFuZCB0aGUgZmlyc3QgY29udHJhc3Qgb24gdGhlICJwcmVkaWN0b3IiIHBhcmFtZXRlciB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3cgaW4gdGFibGVzIGFib3ZlKSwgd2hldGhlciBpbmRleGVkIHNwaXJpdHVhbCBleHBlcmllbmNlcyB1c2luZyB0aGUgRFNFIG9yIFNFIHNjYWxlcy4gSW4gb3RoZXIgd29yZHMsIHRoZSAicHJlZGljdG9ycyBvZiBpbnRlcmVzdCIgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHdlcmUgYmV0dGVyIHByZWRpY3RvcnMgb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgdGhhbiBvdXIgdHdvICJjb250cm9sIiBwcmVkaWN0b3JzLgoKYGBge3J9Cmg1X3Bsb3RfYSA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGsiLCAid29iIikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUsIHByZWRpY3RvciksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgRFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3J9Cmg1X3Bsb3RfYiA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGsiLCAid29iIikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9wbG90X2EsIGg1X3Bsb3RfYiwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKYGBge3J9Cmg1X3Bsb3RfYyA8LSBkX3N0ZF9oNSAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gInNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoayIsICJ3b2IiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfcGxvdF9kIDwtIGRfc3RkX2g1ICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrIiwgIndvYiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogT3ZlcmFsbCAodXNpbmcgU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiU3Bpcml0dWFsIEV2ZW50cyBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDVfcGxvdF9jLCBoNV9wbG90X2QsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjICJDb250cm9sIiBzY2FsZXMsIHdpdGhvdXQgcmV2ZXJzZSBjb2RpbmcKClRoZSB0d28gY29udHJvbCBzY2FsZXMgYXJlIHRoZSBvbmx5IHNjYWxlcyB0aGF0IGhhdmUgcmV2ZXJzZS1jb2RlZCBpdGVtcyEgVGhpcyBpcyByZWFsbHkgdG9vIGJhZCwgYmVjYXVzZSBpdCBtZWFucyB0aGF0IHRoZXkgYXJlIG5vdCBhY3R1YWxseSBnb29kIHdheXMgdG8gYXNzZXNzIGEgeWVzLWJpYXMuCgpJbiBhbiBhdHRlbXB0IHRvIHJlbWVkeSB0aGlzLCBoZXJlIEkgcmUtc2NvcmluZyB0aGVzZSBzY2FsZXMgYWZ0ZXIgX2Ryb3BwaW5nIHJldmVyc2UtY29kZWQgaXRlbXNfLgoKIyMjIENvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCgpgYGB7cn0KZF9jdGxfbm9yZXYgPC0gZDAgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIHN0YXJ0c193aXRoKCJwN19odGhrIiksIHN0YXJ0c193aXRoKCJwN193b2IiKSwKICAgICAgICAgLWMoZW5kc193aXRoKCJfY2F0IiksIGVuZHNfd2l0aCgiX3RvdGFsIiksIGNvbnRhaW5zKCJjaGVjayIpKSkgJT4lCiAgc2VsZWN0KC1jKGNvbnRhaW5zKCJyZXZlcnNlIikpKSAlPiUgIyBkcm9wIFExLCBRMiwgUTMsIFE0IGZyb20gd29iIAogIHNlbGVjdCgtYyhwN19odGhrX25vdC5mdW4sIHA3X2h0aGtfbGlsLmNoYWxsZW5nLCBwN19odGhrX2F2b2lkLnRoaW5rLAogICAgICAgICAgICBwN19odGhrX2hyZC5oYXYudG8sIHA3X2h0aGtfc21hbC5kYWlseSwgcDdfaHRoa19saWwudGhvdWdodCwKICAgICAgICAgICAgcDdfaHRoa19ub3QuZXhjaXRpbmcsIHA3X2h0aGtfbWVudGFsLmVmZnJ0LCBwN19odGhrX2pvYi5kb25lKSkgJT4lICMgZHJvcCBRMywgUTQsIFE1LCBRNywgUTgsIFE5LCBRMTIsIFExNiwgUTE3IGZyb20gaHRoawogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBpZmVsc2UoZ3JlcGwoImh0aGsiLCBxdWVzdGlvbiksICJodGhrIiwKICAgICAgICAgICAgICAgICAgICAgICAgaWZlbHNlKGdyZXBsKCJ3b2IiLCBxdWVzdGlvbiksICJ3b2IiLCBOQSkpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCBzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKHNjb3JlX25vcmV2ID0gc3VtKHJlc3BvbnNlKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KHNjYWxlKSAlPiUKICBtdXRhdGUoc2NvcmVfbm9yZXZfc3RkID0gc2NhbGUoc2NvcmVfbm9yZXYsIHNjYWxlID0gVCkpICU+JQogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQpkX3N0ZF9oNV9ub3JldiA8LSBmdWxsX2pvaW4oCiAgZF9zdGQgJT4lCiAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBkc2UsIHNlKSAlPiUKICAgIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSksCiAgZnVsbF9qb2luKAogICAgZF9zdGQgJT4lCiAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSkgJT4lCiAgICAgIGdhdGhlcihwcmVkaWN0b3IsIHNjb3JlLCBjKGFicywgcG9yLCBtbSkpLAogICAgZF9jdGxfbm9yZXYgJT4lCiAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlLCBzY29yZV9ub3Jldl9zdGQpICU+JQogICAgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiaHRoa19ub3JldiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJ3b2Jfbm9yZXYiKSkgJT4lCiAgICAgIHJlbmFtZShwcmVkaWN0b3IgPSBzY2FsZSwKICAgICAgICAgICAgIHNjb3JlID0gc2NvcmVfbm9yZXZfc3RkKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpjb250cmFzdHMoZF9zdGRfaDVfbm9yZXYkcHJlZGljdG9yKSA8LSBjYmluZChpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFic19wbW0gPSBjKDIsIDAsIC0xLCAtMSwgMCksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBvcl9tbSA9IGMoMCwgMCwgLTEsIDEsIDApLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGU6IAoKYGBge3J9CnI1X25vcmV2X2RzZSA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgKiBwN19jdHJ5LCAKICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2ICU+JSBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpKQojIHN1bW1hcnkocjVfbm9yZXZfZHNlKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0Kc3VtbWFyeShyNV9ub3Jldl9kc2UpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygxMSwgYm9sZCA9IFQpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpBbmQgaGVyZSBhcmUgb3VyIHJlc3VsdHMgdXNpbmcgdGhlIFNwaXJpdHVhbCBFdmVudHMgc2NhbGU6IAoKYGBge3J9CnI1X25vcmV2X3NlIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAqIHA3X2N0cnksIAogICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3JldiAlPiUgZmlsdGVyKHNjYWxlID09ICJzZSIpKQojIHN1bW1hcnkocjVfbm9yZXZfc2UpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpzdW1tYXJ5KHI1X25vcmV2X3NlKSRjb2VmZmljaWVudHMgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLXBhcmFtZXRlciwgLXApLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgcm93X3NwZWMoMTEsIGJvbGQgPSBUKQpgYGAKCkFnYWluLCBpbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzUqKjogQXMgcHJlZGljdGVkLCB0aGUgaW50ZXJhY3Rpb24gYmV0d2VlbiAic2NvcmUiIGFuZCB0aGUgZmlyc3QgY29udHJhc3Qgb24gdGhlICJwcmVkaWN0b3IiIHBhcmFtZXRlciB3YXMgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSAoc2VlIGJvbGRlZCByb3cgaW4gdGFibGVzIGFib3ZlKSwgd2hldGhlciBpbmRleGVkIHNwaXJpdHVhbCBleHBlcmllbmNlcyB1c2luZyB0aGUgRFNFIG9yIFNFIHNjYWxlcy4gSW4gb3RoZXIgd29yZHMsIHRoZSAicHJlZGljdG9ycyBvZiBpbnRlcmVzdCIgKGFic29ycHRpb24gYW5kIHRoZSB0d28gcG9yb3NpdHkgbWVhc3VyZXMpIHdlcmUgYmV0dGVyIHByZWRpY3RvcnMgb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgdGhhbiBvdXIgdHdvICJjb250cm9sIiBwcmVkaWN0b3JzLCBldmVuIHdoZW4gd2Ugb25seSBpbmNsdWRlZCB0aGUgbm9uLXJldmVyc2UtY29kZWQgaXRlbXMgZnJvbSB0aGUgdHdvICJjb250cm9sIiBwcmVkaWN0b3JzLgoKYGBge3J9Cmg1X25vcmV2X3Bsb3RfYSA8LSBkX3N0ZF9oNV9ub3JldiAlPiUKICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBEU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfbm9yZXZfcGxvdF9iIDwtIGRfc3RkX2g1X25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAiZHNlIikgJT4lCiAgbXV0YXRlKHByZWRfdHlwZSA9IGNhc2Vfd2hlbigKICAgIHByZWRpY3RvciAlaW4lIGMoImFicyIsICJwb3IiLCAibW0iKSB+ICJIeXBvdGhlc2l6ZWQiLAogICAgcHJlZGljdG9yICVpbiUgYygiaHRoa19ub3JldiIsICJ3b2Jfbm9yZXYiKSB+ICJDb250cm9sIiksCiAgICBwcmVkX3R5cGUgPSBmYWN0b3IocHJlZF90eXBlLCBsZXZlbHMgPSBjKCJIeXBvdGhlc2l6ZWQiLCAiQ29udHJvbCIpKSwKICAgIHByZWRpY3RvciA9IHJlY29kZV9mYWN0b3IocHJlZGljdG9yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrX25vcmV2IiA9ICJIYXJkIHRoaW5raW5nIChubyByZXYuKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2Jfbm9yZXYiID0gIldheXMgb2YgYmVpbmcgKG5vIHJldi4pIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogT3ZlcmFsbCAodXNpbmcgRFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIsCiAgICAgICB5ID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY29yZSAoc3RhbmRhcmRpemVkIGNvbGxhcHNpbmcgYWNyb3NzIHNpdGVzKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjYsIGluY2x1ZGUgPSBUfQpwbG90X2dyaWQoaDVfbm9yZXZfcGxvdF9hLCBoNV9ub3Jldl9wbG90X2IsIHJlbF93aWR0aHMgPSBjKDIsIDEpKQpgYGAKCmBgYHtyfQpoNV9ub3Jldl9wbG90X2MgPC0gZF9zdGRfaDVfbm9yZXYgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJzZSIpICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgeSA9IGV4cGVyaWVuY2UsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHJvd3MgPSB2YXJzKHByZWRfdHlwZSwgcHJlZGljdG9yKSwgY29scyA9IHZhcnMocDdfY3RyeSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siLCBhbHBoYSA9IDAuMjUsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSHlwb3RoZXNpcyAjNTogQnkgc2l0ZSBhbmQgcHJlZGljdG9yICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7cn0KaDVfbm9yZXZfcGxvdF9kIDwtIGRfc3RkX2g1X25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQocm93cyA9IHZhcnMocHJlZF90eXBlKSkgKwogIGdlb21faml0dGVyKGFscGhhID0gMC4yNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM1OiBPdmVyYWxsICh1c2luZyBTRSBzY2FsZSkiLAogICAgICAgeCA9ICJTY29yZSBvbiBwcmVkaWN0b3IgKHN0YW5kYXJkaXplZCBjb2xsYXBzaW5nIGFjcm9zcyBzaXRlcykiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNiwgaW5jbHVkZSA9IFR9CnBsb3RfZ3JpZChoNV9ub3Jldl9wbG90X2MsIGg1X25vcmV2X3Bsb3RfZCwgcmVsX3dpZHRocyA9IGMoMiwgMSkpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMjIEluIGVhY2ggc2l0ZSBjb25zaWRlcmVkIGFsb25lCgpIZXJlIEkgY29uZHVjdCBhIHNldCBvZiBwYXJhbGxlbCBhbmFseXNlcywgY29uc2lkZXJpbmcgZWFjaCBzaXRlIGFsb25lLgoKYGBge3J9CmRfY3RsX25vcmV2X2J5c2l0ZSA8LSBkMCAlPiUKICBzZWxlY3QocDdfY3RyeSwgcDdfc3Viaiwgc3RhcnRzX3dpdGgoInA3X2h0aGsiKSwgc3RhcnRzX3dpdGgoInA3X3dvYiIpLAogICAgICAgICAtYyhlbmRzX3dpdGgoIl9jYXQiKSwgZW5kc193aXRoKCJfdG90YWwiKSwgY29udGFpbnMoImNoZWNrIikpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoInJldmVyc2UiKSkpICU+JSAjIGRyb3AgUTEsIFEyLCBRMywgUTQgZnJvbSB3b2IgCiAgc2VsZWN0KC1jKHA3X2h0aGtfbm90LmZ1biwgcDdfaHRoa19saWwuY2hhbGxlbmcsIHA3X2h0aGtfYXZvaWQudGhpbmssCiAgICAgICAgICAgIHA3X2h0aGtfaHJkLmhhdi50bywgcDdfaHRoa19zbWFsLmRhaWx5LCBwN19odGhrX2xpbC50aG91Z2h0LAogICAgICAgICAgICBwN19odGhrX25vdC5leGNpdGluZywgcDdfaHRoa19tZW50YWwuZWZmcnQsIHA3X2h0aGtfam9iLmRvbmUpKSAlPiUgIyBkcm9wIFEzLCBRNCwgUTUsIFE3LCBROCwgUTksIFExMiwgUTE2LCBRMTcgZnJvbSBodGhrCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGlmZWxzZShncmVwbCgiaHRoayIsIHF1ZXN0aW9uKSwgImh0aGsiLAogICAgICAgICAgICAgICAgICAgICAgICBpZmVsc2UoZ3JlcGwoIndvYiIsIHF1ZXN0aW9uKSwgIndvYiIsIE5BKSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlKSAlPiUKICBzdW1tYXJpc2Uoc2NvcmVfbm9yZXYgPSBzdW0ocmVzcG9uc2UpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogIG11dGF0ZShzY29yZV9ub3Jldl9zdGQgPSBzY2FsZShzY29yZV9ub3Jldiwgc2NhbGUgPSBUKSkgJT4lCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfc3RkX2g1X25vcmV2X2J5c2l0ZSA8LSBmdWxsX2pvaW4oCiAgZF9zdGRfYnlzaXRlICU+JQogICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgZHNlLCBzZSkgJT4lCiAgICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpLAogIGZ1bGxfam9pbigKICAgIGRfc3RkX2J5c2l0ZSAlPiUKICAgICAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSAlPiUKICAgICAgZ2F0aGVyKHByZWRpY3Rvciwgc2NvcmUsIGMoYWJzLCBwb3IsIG1tKSksCiAgICBkX2N0bF9ub3Jldl9ieXNpdGUgJT4lCiAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHNjYWxlLCBzY29yZV9ub3Jldl9zdGQpICU+JQogICAgICBtdXRhdGUoc2NhbGUgPSByZWNvZGUoc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiaHRoa19ub3JldiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJ3b2Jfbm9yZXYiKSkgJT4lCiAgICAgIHJlbmFtZShwcmVkaWN0b3IgPSBzY2FsZSwKICAgICAgICAgICAgIHNjb3JlID0gc2NvcmVfbm9yZXZfc3RkKSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSksCiAgICAgICAgIHByZWRpY3RvciA9IGZhY3RvcihwcmVkaWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g1X25vcmV2X2J5c2l0ZSRzY2FsZSkgPC0gY29udHIuc3VtKDIpCmNvbnRyYXN0cyhkX3N0ZF9oNV9ub3Jldl9ieXNpdGUkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmNvbnRyYXN0cyhkX3N0ZF9oNV9ub3Jldl9ieXNpdGUkcHJlZGljdG9yKSA8LSBjYmluZCgKICBpbnRfY3RsID0gYygyLC0zLCAyLCAyLCAtMyksCiAgYWJzX3BtbSA9IGMoMiwgMCwgLTEsIC0xLCAwKSwKICBwb3JfbW0gPSBjKDAsIDAsIC0xLCAxLCAwKSwKICBodGhrX3dvYiA9IGMoMCwgMSwgMCwgMCwgLTEpKQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIGZvciB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjYWxlOgoKYGBge3J9CnI1X2J5c2l0ZV9ub3Jldl9kc2VfdXMgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdXMpCgpyNV9ieXNpdGVfbm9yZXZfZHNlX2doIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIsIHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfZHNlX2doKQoKcjVfYnlzaXRlX25vcmV2X2RzZV90aCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJkc2UiLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X2RzZV90aCkKCnI1X2J5c2l0ZV9ub3Jldl9kc2VfY2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAiZHNlIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfY2gpCgpyNV9ieXNpdGVfbm9yZXZfZHNlX3Z0IDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gImRzZSIsIHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpyYmluZChzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9kc2VfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDEwKSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDExLCAyMCkgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAyMSwgMzApICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgMzEsIDQwKSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNDEsIDUwKSAlPiUKICByb3dfc3BlYyhjKHNlcSg3LCA0NywgMTApKSwgYm9sZCA9IFQpCmBgYAoKSGVyZSBhcmUgb3VyIHJlc3VsdHMgZm9yIHRoZSBEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMgc2NhbGU6CgpgYGB7cn0KcjVfYnlzaXRlX25vcmV2X3NlX3VzIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJzZSIsIHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdXMpCgpyNV9ieXNpdGVfbm9yZXZfc2VfZ2ggPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKIyBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9naCkKCnI1X2J5c2l0ZV9ub3Jldl9zZV90aCA8LSBsbShleHBlcmllbmNlIH4gc2NvcmUgKiBwcmVkaWN0b3IgLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g1X25vcmV2X2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpbHRlcihzY2FsZSA9PSAic2UiLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3RoKQoKcjVfYnlzaXRlX25vcmV2X3NlX2NoIDwtIGxtKGV4cGVyaWVuY2UgfiBzY29yZSAqIHByZWRpY3RvciAsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHNjYWxlID09ICJzZSIsIHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfY2gpCgpyNV9ieXNpdGVfbm9yZXZfc2VfdnQgPC0gbG0oZXhwZXJpZW5jZSB+IHNjb3JlICogcHJlZGljdG9yICwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWx0ZXIoc2NhbGUgPT0gInNlIiwgcDdfY3RyeSA9PSAiVmFudWF0dSIpKQojIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3Z0KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0KcmJpbmQoc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV9naCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkdoYW5hIiksCiAgICAgIHN1bW1hcnkocjVfYnlzaXRlX25vcmV2X3NlX3RoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVGhhaWxhbmQiKSwKICAgICAgc3VtbWFyeShyNV9ieXNpdGVfbm9yZXZfc2VfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI1X2J5c2l0ZV9ub3Jldl9zZV92dCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlZhbnVhdHUiKSkgJT4lCiAgcmVuYW1lKGIgPSBFc3RpbWF0ZSwgYHN0YW5kYXJkIGVycm9yYCA9IFN0ZC4uRXJyb3IsIGB0YCA9IHQudmFsdWUsCiAgICAgICAgIHAgPSBQci4uLnQuLikgJT4lCiAgbXV0YXRlX2F0KHZhcnMoLWMocGFyYW1ldGVyLCBwLCBzaXRlKSksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAgc2VsZWN0KC1zaXRlKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIGdyb3VwX3Jvd3MoIlVTIiwgMSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgMTEsIDIwKSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDIxLCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAzMSwgNDApICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCA0MSwgNTApICU+JQogIHJvd19zcGVjKGMoc2VxKDcsIDQ3LCAxMCkpLCBib2xkID0gVCkKYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIGZvdW5kIGV2aWRlbmNlIGluIGZhdm9yIG9mIEh5cG90aGVzaXMgIzUgaW4gYWxtb3N0IGFsbCBzaXRlcyoqOiBJbiBtb3N0IHNpdGVzLCBhcyBwcmVkaWN0ZWQgdGhlIGludGVyYWN0aW9uIGJldHdlZW4gInNjb3JlIiBhbmQgdGhlIGZpcnN0IGNvbnRyYXN0IG9uIHRoZSAicHJlZGljdG9yIiBwYXJhbWV0ZXIgd2FzIHNpZ25pZmljYW50bHkgcG9zaXRpdmUgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZXMgYWJvdmUpLCB3aGV0aGVyIGluZGV4ZWQgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIHVzaW5nIHRoZSBEU0Ugb3IgU0Ugc2NhbGVzLiBJbiBvdGhlciB3b3JkcywgdGhlICJwcmVkaWN0b3JzIG9mIGludGVyZXN0IiAoYWJzb3JwdGlvbiBhbmQgdGhlIHR3byBwb3Jvc2l0eSBtZWFzdXJlcykgd2VyZSBiZXR0ZXIgcHJlZGljdG9ycyBvZiBzcGlyaXR1YWwgZXhwZXJpZW5jZSB0aGFuIG91ciB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMsIGV2ZW4gd2hlbiB3ZSBvbmx5IGluY2x1ZGVkIHRoZSBub24tcmV2ZXJzZS1jb2RlZCBpdGVtcyBmcm9tIHRoZSB0d28gImNvbnRyb2wiIHByZWRpY3RvcnMuIFRoZSBvbmx5IGV4Y2VwdGlvbnMgdG8gdGhpcyB3ZXJlIEdoYW5hIHdoZW4gdXNpbmcgdGhlIERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyBzY2FsZSAoZmlyc3QgdGFibGUgYWJvdmUpLCBhbmQgVmFudWF0dSB3aGVuIHVzaW5nIHRoZSBTcGlyaXR1YWwgRXZlbnRzIHNjYWxlIChzZWNvbmQgdGFibGUgYWJvdmUpLgoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjgsIGluY2x1ZGUgPSBUfQpkX3N0ZF9oNV9ub3Jldl9ieXNpdGUgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJkc2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUsIHByZWRpY3RvciksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgRFNFIHNjYWxlKSIsCiAgICAgICB4ID0gIlNjb3JlIG9uIHByZWRpY3RvciAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIHkgPSAiRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2VzIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC44LCBpbmNsdWRlID0gVH0KZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JQogIGZpbHRlcihzY2FsZSA9PSAic2UiKSAlPiUKICBtdXRhdGUocHJlZF90eXBlID0gY2FzZV93aGVuKAogICAgcHJlZGljdG9yICVpbiUgYygiYWJzIiwgInBvciIsICJtbSIpIH4gIkh5cG90aGVzaXplZCIsCiAgICBwcmVkaWN0b3IgJWluJSBjKCJodGhrX25vcmV2IiwgIndvYl9ub3JldiIpIH4gIkNvbnRyb2wiKSwKICAgIHByZWRfdHlwZSA9IGZhY3RvcihwcmVkX3R5cGUsIGxldmVscyA9IGMoIkh5cG90aGVzaXplZCIsICJDb250cm9sIikpLAogICAgcHJlZGljdG9yID0gcmVjb2RlX2ZhY3RvcihwcmVkaWN0b3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGtfbm9yZXYiID0gIkhhcmQgdGhpbmtpbmcgKG5vIHJldi4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYl9ub3JldiIgPSAiV2F5cyBvZiBiZWluZyAobm8gcmV2LikiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmUsIHkgPSBleHBlcmllbmNlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhwcmVkX3R5cGUsIHByZWRpY3RvciksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIiwgYWxwaGEgPSAwLjI1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgRXZlbnRzIHNjb3JlIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC42LCBpbmNsdWRlID0gVH0KZF9zdGRfaDVfbm9yZXZfYnlzaXRlICU+JQogIG11dGF0ZShwcmVkX3R5cGUgPSBjYXNlX3doZW4oCiAgICBwcmVkaWN0b3IgJWluJSBjKCJhYnMiLCAicG9yIiwgIm1tIikgfiAiSHlwb3RoZXNpemVkIiwKICAgIHByZWRpY3RvciAlaW4lIGMoImh0aGtfbm9yZXYiLCAid29iX25vcmV2IikgfiAiQ29udHJvbCIpLAogICAgcHJlZF90eXBlID0gZmFjdG9yKHByZWRfdHlwZSwgbGV2ZWxzID0gYygiSHlwb3RoZXNpemVkIiwgIkNvbnRyb2wiKSksCiAgICBwcmVkaWN0b3IgPSByZWNvZGVfZmFjdG9yKHByZWRpY3RvciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoa19ub3JldiIgPSAiSGFyZCB0aGlua2luZyAobm8gcmV2LikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iX25vcmV2IiA9ICJXYXlzIG9mIGJlaW5nIChubyByZXYuKSIpLAogICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjb3JlLCB5ID0gZXhwZXJpZW5jZSwgZmlsbCA9IHByZWRfdHlwZSwgY29sb3IgPSBwcmVkX3R5cGUpKSArCiAgZmFjZXRfZ3JpZChyb3dzID0gdmFycyhzY2FsZSksIGNvbHMgPSB2YXJzKHA3X2N0cnkpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKGFlcyhmaWxsID0gcHJlZF90eXBlLCBjb2xvciA9IHByZWRfdHlwZSksCiAgICAgICAgICAgICAgbWV0aG9kID0gImxtIiwgYWxwaGEgPSAwLjQsIHNob3cubGVnZW5kID0gVCkgKwogIHNjYWxlX2NvbG9yX2Rpc2NyZXRlKCkgKwogIHNjYWxlX2ZpbGxfZGlzY3JldGUoKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzU6IEJ5IHNpdGUgYW5kIHByZWRpY3RvciAodXNpbmcgU0Ugc2NhbGUpIiwKICAgICAgIHggPSAiU2NvcmUgb24gcHJlZGljdG9yIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLAogICAgICAgeSA9ICJTcGlyaXR1YWwgZXhwZXJpZW5jZSBzY29yZSAoc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGUpIiwKICAgICAgIGNvbG9yID0gIlByZWRpY3RvciB0eXBlIiwgZmlsbCA9ICJQcmVkaWN0b3IgdHlwZSIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBCZXlvbmQgdGhlIHByZXJlZ2lzdHJhdGlvbgoKIyMgQ29tYmluZWQgZWZmZWN0cyBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBvbiBzcGlyaXR1YWwgZXhwZXJpZW5jZXMgKGFic29ycHRpb24gY29udHJvbGxpbmcgZm9yIHBvcm9zaXR5ICYgdmljZSB2ZXJzYSkKCiMjIyBDb2xsYXBzaW5nIGFjcm9zcyBzaXRlcwoKSGVyZSBJIGV4YW1pbmUgYSBiaWcgbW9kZWwsIGluIHdoaWNoIGJvdGggYWJzb3JwdGlvbiBhbmQgcG9yb3NpdHkgdG9nZXRoZXIgcHJlZGljdCBzcGlyaXR1YWwgZXhwZXJpZW5jZXMuIFRoaXMgYWxsb3dzIHVzIHRvIGxvb2sgYXQgdGhlIGVmZmVjdCBvZiBhYnNvcnB0aW9uIGNvbnRyb2xsaW5nIGZvciBwb3Jvc2l0eSwgdGhlIGVmZmVjdCBvZiBwb3Jvc2l0eSBjb250cm9sbGluZyBmb3IgYWJzb3JwdGlvbiwgYW5kIHRoZSBwb3NzaWJpbGl0eSBvZiBhbiBpbnRlcmFjdGlvbiBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHBvcm9zaXR5LiBJIGxvb2sgYXQgcG9yb3NpdHkgYXMgaW5kZXhlZCBieSB0aGUgUG9yb3NpdHkgKER1bGluKSBzY2FsZSBhbmQgYXMgaW5kZXhlZCBieSB0aGUgTWFydGhhIFN0b3J5IHNlcGFyYXRlbHksIGFuZCB1c2UgYm90aCB0aGUgRGFpbHkgU3Bpcml0dWFsIEV4cGVyaWVuY2UgYW5kIFNwaXJpdHVhbCBFdmVudHMgc2NhbGVzIHRvIGluZGV4IHNwaXJpdHVhbCBleHBlcmllbmNlLgoKYGBge3J9CmRfc3RkX2g2IDwtIGRfc3RkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkICU+JQogICAgICAgICAgICAgIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGFicywgcG9yLCBtbSkpICU+JQogIG11dGF0ZV9hdCh2YXJzKHA3X2N0cnksIHNjYWxlKSwgZnVucyhmYWN0b3IpKQoKY29udHJhc3RzKGRfc3RkX2g2JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfc3RkX2g2JHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlOiAKCmBgYHtyfQpyNl9wb3IgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcDdfY3RyeSAqIHNjYWxlIAogICAgICAgICAgICAgICArICgxIHwgcDdfc3ViaiksIGRfc3RkX2g2KQojIHN1bW1hcnkocjZfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0Kc3VtbWFyeShyNl9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyhjKDI6MywgOSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyNl9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHA3X2N0cnkgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgZF9zdGRfaDYpCiMgc3VtbWFyeShyNl9tbSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnN1bW1hcnkocjZfbW0pJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyhjKDI6MywgOSksIGJvbGQgPSBUKQpgYGAKCkluIGJvdGggY2FzZXMsICoqd2Ugc2VlIGV2aWRlbmNlIGZvciBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBiZWluZyBwb3NpdGl2ZWx5IHJlbGF0ZWQgdG8gc3Bpcml0dWFsIGV4cGVyaWVuY2VzIGV2ZW4gYWZ0ZXIgY29udHJvbGxpbmcgZm9yIGVhY2ggb3RoZXIqKjogVGhlIHJlbGF0aW9uc2hpcCBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBzaWduaWZpY2FudGx5IHBvc2l0aXZlLCBjb250cm9sbGluZyBmb3IgcG9yb3NpdHk7IGFuZCB0aGUgZWZmZWN0IG9mIHBvcm9zaXR5IChhcyBpbmRleGVkIGJ5IGVpdGhlciB0aGUgRHVsaW4gc2NhbGUgb3IgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSkgYW5kIHNwaXJpdHVhbCBleHBlcmllbmNlIHdhcyBhbHNvIHNpZ25pZmljYW50bHkgcG9zaXRpdmUsIGNvbnRyb2xsaW5nIGZvciBhYnNvcnB0aW9uLiBUaGVyZSB3YXMgbm8gc3Ryb25nIGV2aWRlbmNlIG9mIGFuIGludGVyYWN0aXZlIGVmZmVjdCBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBpbiBlaXRoZXIgY2FzZSAoc2VlIGJvbGRlZCByb3dzIGluIHRhYmxlcyBhYm92ZSkuCgpgYGB7cn0KaDZfcGxvdF9hMSA8LSBkX3N0ZF9oNiAlPiUKICBhcnJhbmdlKGV4cGVyaWVuY2UpICU+JQogIGdncGxvdChhZXMoeCA9IGFicywgeSA9IHBvciwgY29sb3IgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgRHVsaW4gUG9yb3NpdHkgc2NhbGUpIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSIsCiAgICAgICB5ID0gIlBvcm9zaXR5IChEdWxpbikgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyfQpoNl9wbG90X2IxIDwtIGRfc3RkX2g2ICU+JQogIGFycmFuZ2UoZXhwZXJpZW5jZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gcG9yLCBjb2xvciA9IGV4cGVyaWVuY2UpKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBPdmVyYWxsIiwKICAgICAgIHggPSAiQWJzb3JwdGlvbiBzY29yZSIsCiAgICAgICB5ID0gIlBvcm9zaXR5IChEdWxpbikgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA2LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gRn0KcGxvdF9ncmlkKHBsb3RfZ3JpZChoNl9wbG90X2ExICsgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gIm5vbmUiKSwgCiAgICAgICAgICAgICAgICAgICAgaDZfcGxvdF9iMSArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICAgICAgICAgIHJlbF93aWR0aHMgPSBjKDIsIDEpKSwKICAgICAgICAgIGdldF9sZWdlbmQoaDZfcGxvdF9hMSksCiAgICAgICAgICBuY29sID0gMSwgcmVsX2hlaWdodHMgPSBjKDEsIDAuMSkpCmBgYAoKYGBge3J9Cmg2X3Bsb3RfYTIgPC0gZF9zdGRfaDYgJT4lCiAgYXJyYW5nZShleHBlcmllbmNlKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBhYnMsIHkgPSBtbSwgY29sb3IgPSBleHBlcmllbmNlKSkgKwogIGZhY2V0X2dyaWQoc2NhbGUgfiBwN19jdHJ5KSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjgpICsKICBzY2FsZV9jb2xvcl92aXJpZGlzX2MoCiAgIyBzY2FsZV9jb2xvcl9kaXN0aWxsZXIocGFsZXR0ZSA9ICJTcGVjdHJhbCIsCiAgICAgICAgICAgICAgICAgICAgICAgIGd1aWRlID0gZ3VpZGVfY29sb3JiYXIoYmFyaGVpZ2h0ID0gMC41LCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBiYXJ3aWR0aCA9IDIwKSkgKwogIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJib3R0b20iKSArCiAgbGFicyh0aXRsZSA9ICJIeXBvdGhlc2lzICM2OiBCeSBzaXRlIGFuZCBzY2FsZSAodXNpbmcgTWFydGhhIFN0b3J5IHNjYWxlKSIsCiAgICAgICB4ID0gIkFic29ycHRpb24gc2NvcmUiLAogICAgICAgeSA9ICJNYXJ0aGEgU3Rvcnkgc2NvcmUiLAogICAgICAgY29sb3IgPSAiU3Bpcml0dWFsIGV4cGVyaWVuY2Ugc2NvcmUiKQpgYGAKCmBgYHtyfQpoNl9wbG90X2IyIDwtIGRfc3RkX2g2ICU+JQogIGFycmFuZ2UoZXhwZXJpZW5jZSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gYWJzLCB5ID0gbW0sIGNvbG9yID0gZXhwZXJpZW5jZSkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuOCkgKwogIHNjYWxlX2NvbG9yX3ZpcmlkaXNfYygKICAjIHNjYWxlX2NvbG9yX2Rpc3RpbGxlcihwYWxldHRlID0gIlNwZWN0cmFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgZ3VpZGUgPSBndWlkZV9jb2xvcmJhcihiYXJoZWlnaHQgPSAwLjUsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGJhcndpZHRoID0gMjApKSArCiAgdGhlbWUobGVnZW5kLnBvc2l0aW9uID0gImJvdHRvbSIpICsKICBsYWJzKHRpdGxlID0gIkh5cG90aGVzaXMgIzY6IE92ZXJhbGwiLAogICAgICAgeCA9ICJBYnNvcnB0aW9uIHNjb3JlIiwKICAgICAgIHkgPSAiTWFydGhhIFN0b3J5IHNjb3JlIiwKICAgICAgIGNvbG9yID0gIlNwaXJpdHVhbCBleHBlcmllbmNlIHNjb3JlIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IEZ9CnBsb3RfZ3JpZChwbG90X2dyaWQoaDZfcGxvdF9hMiArIHRoZW1lKGxlZ2VuZC5wb3NpdGlvbiA9ICJub25lIiksIAogICAgICAgICAgICAgICAgICAgIGg2X3Bsb3RfYjIgKyB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAibm9uZSIpLCAKICAgICAgICAgICAgICAgICAgICByZWxfd2lkdGhzID0gYygyLCAxKSksCiAgICAgICAgICBnZXRfbGVnZW5kKGg2X3Bsb3RfYTIpLAogICAgICAgICAgbmNvbCA9IDEsIHJlbF9oZWlnaHRzID0gYygxLCAwLjEpKQpgYGAKCiMjIyBJbiBlYWNoIHNpdGUgY29uc2lkZXJlZCBhbG9uZQoKSGVyZSBJIGNvbmR1Y3QgYSBzZXQgb2YgcGFyYWxsZWwgYW5hbHlzZXMsIGNvbnNpZGVyaW5nIGVhY2ggc2l0ZSBhbG9uZS4KCmBgYHtyfQpkX3N0ZF9oNl9ieXNpdGUgPC0gZF9zdGRfYnlzaXRlICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIGRzZSwgc2UpICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkX2J5c2l0ZSAlPiUKICAgICAgICAgICAgICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBhYnMsIHBvciwgbW0pKSAlPiUKICBtdXRhdGVfYXQodmFycyhwN19jdHJ5LCBzY2FsZSksIGZ1bnMoZmFjdG9yKSkKCmNvbnRyYXN0cyhkX3N0ZF9oNl9ieXNpdGUkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9zdGRfaDZfYnlzaXRlJHA3X2N0cnkpIDwtIGNvbnRyLnN1bSg1KQpgYGAKCkhlcmUgYXJlIG91ciByZXN1bHRzIHVzaW5nIHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlOiAKCmBgYHtyfQpyNl9ieXNpdGVfcG9yX3VzIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJVUyIpKQojIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl91cykKCnI2X2J5c2l0ZV9wb3JfZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfcG9yX2doKQoKcjZfYnlzaXRlX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdGgpCgpyNl9ieXNpdGVfcG9yX2NoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJDaGluYSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX3Bvcl9jaCkKCnI2X2J5c2l0ZV9wb3JfdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpyYmluZChzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9wb3JfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDgpICU+JQogIGdyb3VwX3Jvd3MoIkdoYW5hIiwgOSwgMTYpICU+JQogIGdyb3VwX3Jvd3MoIlRoYWlsYW5kIiwgMTcsIDI0KSAlPiUKICBncm91cF9yb3dzKCJDaGluYSIsIDI1LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVmFudWF0dSIsIDMzLCA0MCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoMiwgMzQsIDgpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDM1LCA4KSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyNl9ieXNpdGVfbW1fdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV91cykKCnI2X2J5c2l0ZV9tbV9naCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpKQojIHN1bW1hcnkocjZfYnlzaXRlX21tX2doKQoKcjZfYnlzaXRlX21tX3RoIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIG1tICogc2NhbGUgKyAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgICAgICAgIGRfc3RkX2g2X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyNl9ieXNpdGVfbW1fdGgpCgpyNl9ieXNpdGVfbW1fY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICAgZF9zdGRfaDZfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV9jaCkKCnI2X2J5c2l0ZV9tbV92dCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHNjYWxlICsgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgICAgICAgICBkX3N0ZF9oNl9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikpCiMgc3VtbWFyeShyNl9ieXNpdGVfbW1fdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpyYmluZChzdW1tYXJ5KHI2X2J5c2l0ZV9tbV91cykkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlVTIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX21tX2doKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiR2hhbmEiKSwKICAgICAgc3VtbWFyeShyNl9ieXNpdGVfbW1fdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI2X2J5c2l0ZV9tbV9jaCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIkNoaW5hIiksCiAgICAgIHN1bW1hcnkocjZfYnlzaXRlX21tX3Z0KSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVmFudWF0dSIpKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtYyhwYXJhbWV0ZXIsIHAsIHNpdGUpKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBzZWxlY3QoLXNpdGUpICU+JQogIGthYmxlKGFsaWduID0gYygibCIsIHJlcCgiciIsIDUpLCAibCIpKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgZ3JvdXBfcm93cygiVVMiLCAxLCA4KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDksIDE2KSAlPiUKICBncm91cF9yb3dzKCJUaGFpbGFuZCIsIDE3LCAyNCkgJT4lCiAgZ3JvdXBfcm93cygiQ2hpbmEiLCAyNSwgMzIpICU+JQogIGdyb3VwX3Jvd3MoIlZhbnVhdHUiLCAzMywgNDApICU+JQogIHJvd19zcGVjKGMoc2VxKDIsIDM0LCA4KSksIGJvbGQgPSBUKSAlPiUKICByb3dfc3BlYyhjKHNlcSgzLCAzNSwgOCkpLCBib2xkID0gVCkKYGBgCgpJbiBib3RoIGNhc2VzLCAqKndlIHNlZSBzb21lIGV2aWRlbmNlIGZvciBwb3Jvc2l0eSAic3dhbXBpbmcgb3V0IiB0aGUgZWZmZWN0IG9mIGFic29ycHRpb24gaW4gc29tZSBzaXRlcyoqLCBpbmNsdWRpbmcgR2hhbmEsIENoaW5hLCBhbmQgVmFudWF0dSB3aGVuIHBvcm9zaXR5IGlzIGluZGV4ZWQgYnkgdGhlIFBvcm9zaXR5IChEdWxpbikgc2NhbGU7IGFuZCB0aGUgVVMsIEdoYW5hLCBhbmQgVmFudWF0dSB3aGVuIHBvcm9zaXR5IGlzIGluZGV4ZWQgYnkgdGhlIE1hcnRoYSBTdG9yeSBzY2FsZSAoaW4gZmFjdCwgaW4gdGhpcyBzZWNvbmQgc2V0IG9mIGFuYWx5c2VzLCBuZWl0aGVyIEFic29ycHRpb24gbm9yIE1hcnRoYSBTdG9yeSBlbmRzIHVwIGJlaW5nIGEgc2lnbmlmaWNhbnQgcHJlZGljdG9yIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIGluIEdoYW5hIG9yIFZhbnVhdHUpLgoKYGBge3J9CiMgcGFydGlhbCBjb3JyZWxhdGlvbnMKZF9zdGRfaDYgJT4lCiAgc3ByZWFkKHNjYWxlLCBleHBlcmllbmNlKSAlPiUKICBzZWxlY3QocDdfc3ViaiwgYWJzLCBwb3IsIGRzZSkgJT4lCiAgZGF0YS5mcmFtZSgpICU+JQogIGNvbHVtbl90b19yb3duYW1lcygicDdfc3ViaiIpICU+JQogIHBhcnRpYWwucigpCgpkX3N0ZF9oNiAlPiUKICBzcHJlYWQoc2NhbGUsIGV4cGVyaWVuY2UpICU+JQogIHNlbGVjdChwN19zdWJqLCBhYnMsIHBvciwgc2UpICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICBjb2x1bW5fdG9fcm93bmFtZXMoInA3X3N1YmoiKSAlPiUKICBwYXJ0aWFsLnIoKQpgYGAKCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBBYnNvcnB0aW9uIGFzIHByaW1hcmlseSBpbmRpdmlkdWFsIGRpZmZlcmVuY2UsIHBvcm9zaXR5IGFzIHByaW1hcmlseSBjdWx0dXJhbCBkaWZmZXJlbmNlPwoKSW4gb3VyIHRoZW9yaXppbmcsIHdlIG9mdGVuIGFzc3VtZSB0aGF0IGFic29ycHRpb24gaXMgcHJpbWFyaWx5IGFuIGluZGl2aWR1YWwgZGlmZmVyZW5jZSwgd2hpbGUgcG9yb3NpdHkgaXMgcHJpbWFyaWx5IGEgY3VsdHVyYWwgZGlmZmVyZW5jZeKAlG9yIGF0IGxlYXN0IHRoYXQgYWJzb3JwdGlvbiBpcyBtb3JlIG9mIGFuIGluZGl2aWR1YWwgZGlmZmVyZW5jZSB0aGFuIGlzIHBvcm9zaXR5LiBEbyB3ZSBzZWUgYW55IGV2aWRlbmNlIG9mIHRoaXMgaW4gdGhpcyBkYXRhc2V0PwoKIyMjIERvIGluZGl2aWR1YWxzIHZhcnkgbW9yZSBpbiBhYnNvcnB0aW9uIHRoYW4gcG9yb3NpdHk/CgpUaGUgZmlyc3Qgd2F5IEkgdGhvdWdodCBvZiB0byBhcHByb2FjaCB0aGlzIHF1ZXN0aW9uIGlzIHRvIGxvb2sgYXQgdGhlIGRlZ3JlZSB0byB3aGljaCBpbmRpdmlkdWFscyB2YXJ5IGluIGVhY2ggb2YgdGhlc2UgdGhyZWUgc2NhbGVzIChBYnNvcnB0aW9uLCBQb3Jvc2l0eSAoRHVsaW4pLCBhbmQgTWFydGhhIFN0b3J5KS4gV2Ugd291bGQgcHJlZGljdCB0aGF0IGFic29ycHRpb24gd291bGQgdmFyeSBtb3JlIGFjcm9zcyBpbmRpdmlkdWFscyB0aGFuIGVpdGhlciBvZiB0aGUgcG9yb3NpdHkgaW5kaWNlcyAoYWZ0ZXIgcmVzY2xhaW5nIGFsbCB0aHJlZWUgc2NhbGVzIHRvIGhhdmUgdGhlIHNhbWUgcmFuZ2UsIHdpdGhpbiBlYWNoIHNpdGUpLgoKYGBge3J9CmRfdmFyX2J5c2l0ZSA8LSBkMCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsKSAlPiUKICBtdXRhdGVfYXQodmFycyhjb250YWlucygidG90YWwiKSksIAogICAgICAgICAgICBmdW5zKHNjYWxlczo6cmVzY2FsZSguLCB0byA9IGMoMCwgMSkpKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgYyhwN19hYnNfdG90YWwsIHA3X3Bvcl90b3RhbCwgcDdfbW1fdG90YWwpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGZhY3RvcihzY2FsZSkpICU+JQogIGdyb3VwX2J5KHNjYWxlLCBwN19jdHJ5KSAlPiUKICBtdXRhdGUoc2NvcmUgPSBzY2FsZShzY29yZSwgc2NhbGUgPSBGKSkgJT4lICMgY2VudGVyIGF0IDAKICB1bmdyb3VwKCkKYGBgCgoKYGBge3IsIGluY2x1ZGUgPSBGfQpwcmludCgiQWJzb3JwdGlvbiB2cy4gUG9yb3NpdHkgKER1bGluKSIpCnByaW50KCJPdmVyYWxsIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIpKQpwcmludCgiVVMiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIiwgcDdfY3RyeSA9PSAiVVMiKSkKCnByaW50KCJHaGFuYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iLCBwN19jdHJ5ID09ICJHaGFuYSIpKQoKcHJpbnQoIlRoYWlsYW5kIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIsIHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCgpwcmludCgiQ2hpbmEiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKCnByaW50KCJWYW51YXR1IikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJtbSIsIHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnByaW50KCJBYnNvcnB0aW9uIHZzLiBNYXJ0aGEgU3RvcnkiKQpwcmludCgiT3ZlcmFsbCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAibW0iKSkKcHJpbnQoIlVTIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJVUyIpKQoKcHJpbnQoIkdoYW5hIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJHaGFuYSIpKQoKcHJpbnQoIlRoYWlsYW5kIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQoKcHJpbnQoIkNoaW5hIikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJwb3IiLCBwN19jdHJ5ID09ICJDaGluYSIpKQoKcHJpbnQoIlZhbnVhdHUiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gInBvciIsIHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnByaW50KCJEdWxpbiB2cy4gTWFydGhhIFN0b3J5IikKcHJpbnQoIk92ZXJhbGwiKQpiYXJ0bGV0dC50ZXN0KHNjb3JlIH4gc2NhbGUsCiAgICAgICAgICAgICAgZF92YXJfYnlzaXRlICU+JSBmaWx0ZXIoc2NhbGUgIT0gIm1tIikpCnByaW50KCJVUyIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiVVMiKSkKCnByaW50KCJHaGFuYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiR2hhbmEiKSkKCnByaW50KCJUaGFpbGFuZCIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiVGhhaWxhbmQiKSkKCnByaW50KCJDaGluYSIpCmJhcnRsZXR0LnRlc3Qoc2NvcmUgfiBzY2FsZSwKICAgICAgICAgICAgICBkX3Zhcl9ieXNpdGUgJT4lIGZpbHRlcihzY2FsZSAhPSAiYWJzIiwgcDdfY3RyeSA9PSAiQ2hpbmEiKSkKCnByaW50KCJWYW51YXR1IikKYmFydGxldHQudGVzdChzY29yZSB+IHNjYWxlLAogICAgICAgICAgICAgIGRfdmFyX2J5c2l0ZSAlPiUgZmlsdGVyKHNjYWxlICE9ICJhYnMiLCBwN19jdHJ5ID09ICJWYW51YXR1IikpCmBgYAoKYGBge3J9CmRfdmFyX2J5c2l0ZSAlPiUKICBncm91cF9ieShzY2FsZSwgcDdfY3RyeSkgJT4lCiAgc3VtbWFyaXNlKHZhcmlhbmNlID0gcm91bmQodmFyKHNjb3JlLCBuYS5ybSA9IFQpLCAzKSkgJT4lCiAgYXJyYW5nZShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgc3ByZWFkKHNjYWxlLCB2YXJpYW5jZSkKYGBgCgpBY2NvcmRpbmcgdG8gQmFydGxldHQgdGVzdHMgb2YgaG9tb2dlbmVpdHkgb2YgdmFyaWFuY2VzLCB0aGUgb25seSBzaXRlIHdoZXJlIHdlIHNlZSB0aGUgcGF0dGVybiB0aGF0IHdlJ2QgZXhwZWN0IGlzIFZhbnVhdHU6IEluZGl2aWR1YWxzIGRpZmZlcmVkIHNpZ25pZmljYW50bHkgbW9yZSBpbiB0aGVpciBBYnNvcnB0aW9uIHNjb3JlcyB0aGFuIGluIHRoZWlyIFBvcm9zaXR5IChEdWxpbikgc2NvcmVzIG9yIE1hcnRoYSBTdG9yeSBzY29yZXMuIEluIENoaW5hLCBpbmRpdmlkdWFscyBkaWZmZXJlZCBzaWduaWZpY2FudGx5IG1vcmUgaW4gdGhlaXIgQWJzb3JwdGlvbiBzY29yZXMgdGhhbiBpbiB0aGVpciBNYXJ0aGEgU3Rvcnkgc2NvcmVzLCBidXQgdmFyaWFuY2Ugd2FzIGVxdWFsIGFjcm9zcyB0aGUgQWJzb3JwdGlvbiBhbmQgUG9yb3NpdHkgc2NvcmVzLiBJbiBHaGFuYSwgd2UgYWN0dWFsbHkgc2F3IHRoZSByZXZlcnNlIHBhdHRlcm4gdG8gd2hhdCB3ZSdkIGV4cGVjdDogSW5kaXZpZHVhbHMgZGlmZmVyZWQgc2lnbmlmaWNhbnRseSBfbGVzc18gaW4gdGhlaXIgQWJzb3JwdGlvbiBzY29yZXMgdGhhbiBpbiB0aGVpciBNYXJ0aGEgU3Rvcnkgc2NvcmVzIChhbmQgdGhlIGRpZmZlcmVuY2VzIGJldHdlZW4gQWJzb3JwdGlvbiBhbmQgUG9yb3NpdHkgKER1bGluKSBhbHNvIHdlbnQgaW4gdGhlIHNhbWUgZGlyZWN0bHksIGFsdGhvdWdoIGl0IHdhcyBub3Qgc2lnbmlmaWNhbnQpLgoKYGBge3IsIGZpZy53aWR0aCA9IDYsIGZpZy5hc3AgPSAwLjMsIGluY2x1ZGUgPSBGfQpkX3Zhcl9ieXNpdGUgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZSwgY29sb3IgPSBzY2FsZSwgZmlsbCA9IHNjYWxlKSkgKwogIGZhY2V0X3dyYXAofiBwN19jdHJ5LCBzY2FsZXMgPSAiZnJlZSIsIG5jb2wgPSA1KSArCiAgZ2VvbV9kZW5zaXR5KHBvc2l0aW9uID0gImlkZW50aXR5IiwgYWxwaGEgPSAwLjIpICsKICB0aGVtZShsZWdlbmQucG9zaXRpb24gPSAiYm90dG9tIiwKICAgICAgICBheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIkRpc3RyaWJ1dGlvbnMiLAogICAgICAgeCA9ICJTY29yZSAoYWRqdXN0ZWQgdG8gc2hhcmUgY29tbW9uIHJhbmdlIGFuZCBiZSBjZW50ZXJlZCBhdCAwLCB3aXRoaW4gZWFjaCBzaXRlKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiLAogICAgICAgY29sb3IgPSAiU2NhbGUiLCBmaWxsID0gIlNjYWxlIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDAuMywgaW5jbHVkZSA9IFR9CmRfdmFyX2J5c2l0ZSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgc3VtbWFyaXNlKHZhcmlhbmNlID0gdmFyKHNjb3JlLCBuYS5ybSA9IFQpKSAlPiUKICBtdXRhdGUoc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSAoRHVsaW4pIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIFN0b3J5IikpICU+JQogIGdncGxvdChhZXMoeCA9IHNjYWxlLCB5ID0gdmFyaWFuY2UsIGNvbG9yID0gc2NhbGUpKSArCiAgZmFjZXRfZ3JpZCh+IHA3X2N0cnkpICsKICBnZW9tX3BvaW50KHNob3cubGVnZW5kID0gRiwgc2l6ZSA9IDMpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlZhcmlhbmNlIGJ5IHNjYWxlIGFuZCBzaXRlIiwKICAgICAgIHggPSAiU2NhbGUiLCB5ID0gIlZhcmlhbmNlIChhZnRlciBhZGp1c3Rpbmcgc2NvcmVzXG50byBzaGFyZSBjb21tb24gcmFuZ2UgYW5kXG5iZSBjZW50ZXJlZCBhdCAwLCB3aXRoaW4gZWFjaCBzaXRlIikKYGBgCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgdGhlcmUgaXMgX25vXyBzdHJvbmcgZXZpZGVuY2UgZnJvbSB0aGVzZSBhbmFseXNlcyBvZiBob21vZ2VuZWl0eSBvZiB2YXJpYW5jZSB0aGF0IGluZGl2aWR1YWxzICh3aXRoaW4gYSBzaXRlKSB2YXJpZWQgbW9yZSBpbiBhYnNvcnB0aW9uIHRoYW4gaW4gcG9yb3NpdHkuKioKCiMjIyBEbyBzaXRlIGRpZmZlcmVuY2VzIGFjY291bnQgZm9yIG1vcmUgb2YgdGhlIHZhcmlhbmNlIGluIHBvcm9zaXR5IHRoYW4gaW4gYWJzb3JwdGlvbj8KClRoZSBzZWNvbmQgd2F5IEkgdGhvdWdodCBvZiB0byBhcHByb2FjaCB0aGlzIHF1ZXN0aW9uIGlzIHRvIGxvb2sgYXQgdGhlIGFtb3VudCBvZiB2YXJpYW5jZSBleHBsYWluZWQgYnkgc2l0ZSBkaWZmZXJlbmNlcyBmb3IgaW4gZWFjaCBvZiB0aGVzZSB0aHJlZSBzY2FsZXMgKEFic29ycHRpb24sIFBvcm9zaXR5IChEdWxpbiksIGFuZCBNYXJ0aGEgU3RvcnkpLiBXZSB3b3VsZCBwcmVkaWN0IHRoYXQgc2l0ZSBkaWZmZXJlbmNlcyB3b3VsZCBleHBsYWluIG1vcmUgb2YgdGhlIHZhcmlhbmNlIGluIHBvcm9zaXR5IHRoYW4gaW4gYWJzb3JwdGlvbiAobm8gcmVzY2FsaW5nIG5lY2Vzc2FyeSBoZXJlKS4KCmBgYHtyfQpyN19hYnMgPC0gbG0ocDdfYWJzX3RvdGFsIH4gcDdfY3RyeSwgCiAgICAgICAgICAgICBkMCAlPiUgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsKSwKICAgICAgICAgICAgIGNvbnRyYXN0cyA9IGxpc3QocDdfY3RyeSA9ICJjb250ci5zdW0iKSkKCnI3X3BvciA8LSBsbShwN19wb3JfdG90YWwgfiBwN19jdHJ5LCAKICAgICAgICAgICAgIGQwICU+JSBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwpLAogICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChwN19jdHJ5ID0gImNvbnRyLnN1bSIpKQoKcjdfbW0gPC0gbG0ocDdfbW1fdG90YWwgfiBwN19jdHJ5LCAKICAgICAgICAgICAgZDAgJT4lIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X21tX3RvdGFsKSwKICAgICAgICAgICAgY29udHJhc3RzID0gbGlzdChwN19jdHJ5ID0gImNvbnRyLnN1bSIpKQpgYGAKCk51bWVyaWNhbGx5IHNwZWFraW5nLCAqKnRoaXMgYXBwZWFycyB0byBiZSB0cnVlOiBJbiBhIHNldCBvZiBsaW5lYXIgbW9kZWxzLCBzaXRlIGRpZmZlcmVuY2VzIGV4cGxhaW4gb25seSBgciBzdW1tYXJ5KHI3X2Ficykkci5zcXVhcmVkICU+JSByb3VuZCgyKSAqIDEwMGAlIG9mIHRoZSB2YXJpYW5jZSBpbiBBYnNvcnB0aW9uIHNjb3JlcywgdnMuIGByIHN1bW1hcnkocjdfcG9yKSRyLnNxdWFyZWQgJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHZhcmlhbmNlIGluIFBvcm9zaXR5IChEdWxpbikgc2NvcmVzIGFuZCBgciBzdW1tYXJ5KHI3X21tKSRyLnNxdWFyZWQgJT4lIHJvdW5kKDIpICogMTAwYCUgb2YgdGhlIHZhcmlhbmNlIGluIE1hcnRoYSBTdG9yeSBzY29yZXMuKioKCkhlcmUsIEknbGwgdHJ5IHRvIGNvbXBhcmUgdGhlc2Ugc3RhdGlzdGljYWxseSAodXNpbmcgc2NvcmVzIGZvciBlYWNoIHNjYWxlIHRoYXQgaGF2ZSBiZWVuIHN0YW5kYXJkaXplZCwgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMpOgoKYGBge3J9CmRfaDdfY29tcGFyZSA8LSBkX3N0ZCAlPiUgCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgYWJzLCBwb3IsIG1tKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtc3RhcnRzX3dpdGgoInA3IikpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9oN19jb21wYXJlJHA3X2N0cnkpIDwtIGNiaW5kKG5vblVTX1VTID0gYygtNCwgMSwgMSwgMSwgMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgR0hWVF9USENIID0gYygwLCAxLCAtMSwgLTEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEdIX1ZUID0gYygwLCAxLCAwLCAwLCAtMSksCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVEhfQ0ggPSBjKDAsIDAsIC0xLCAxLCAwKSkKY29udHJhc3RzKGRfaDdfY29tcGFyZSRzY2FsZSkgPC0gY2JpbmQocG1tX2FicyA9IGMoLTIsIDEsIDEpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwb3JfbW0gPSBjKDAsIC0xLCAxKSkKCnI3X2NvbXBhcmUgPC0gbG1lcihzY29yZSB+IHA3X2N0cnkgKiBzY2FsZSArICgxIHwgcDdfc3ViaiksIGRfaDdfY29tcGFyZSkKIyBzdW1tYXJ5KHI3X2NvbXBhcmUpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpzdW1tYXJ5KHI3X2NvbXBhcmUpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYyg4OjExLCBib2xkID0gVCkKYGBgCgpUaGlzIGFuYWx5c2lzIGFwcGVhcnMgdG8gYmUgY29uc2lzdGVudDogSSB0aGluayB0aGF0IHRoZSBpbnRlcmFjdGlvbnMgdGhhdCBJIGhhdmUgYm9sZGVkIGluIHRoZSB0YWJsZSBhYm92ZSBzdWdnZXN0IHRoYXQgdGhlIGRpZmZlcmVuY2VzIGFjcm9zcyBzaXRlcyAoaGVyZSwgY29kZWQgYXMgZGlmZmVyZW5jZXMgYmV0d2VlbiAoYSkgbm9uLVVTIGFuZCBVUyBzaXRlcywgKGIpIEdoYW5hIGFuZCBWYW51YXR1IHZzLiBUaGFpbGFuZCBhbmQgQ2hpbmEsIChjKSBHaGFuYSB2cy4gVmFudWF0dSwgYW5kIChkKSBUaGFpbGFuZCB2cy4gQ2hpbmEpIHdlcmUgZ2VuZXJhbGx5IGV4YWdnZXJhdGVkIGluIHRoZSB0d28gcG9yb3NpdHkgc2NhbGVzIGNvbXBhcmVkIHRvIHRoZSBBYnNvcnB0aW9uIHNjYWxlLCBhbmQgdGhlc2Ugc2VlbXMgdG8gYmUgdHJ1ZSBmcm9tIHRoZSBmb2xsb3dpbmcgcGxvdDoKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC41LCBpbmNsdWRlID0gVH0KZF9oN19jb21wYXJlICU+JQogIG11dGF0ZShzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgU3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCguIH4gc2NhbGUpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSBncm91cF9ieShzY2FsZSwgcDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZCgic2NvcmUiKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBjb2xvciA9ICJibGFjayIsIGZhdHRlbiA9IDIpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIlZhcmlhYmlsaXR5IGFjcm9zcyBzaXRlcyBieSBzY2FsZSIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgdGhlcmUgX2lzXyBwcmV0dHkgc3Ryb25nIGV2aWRlbmNlIGZyb20gdGhlc2UgcmVzcmVzc2lvbiBhbmFseXNlcyB0aGF0IHNpdGUgZGlmZmVyZW5jZXMgYWNjb3VudGVkIGZvciBtb3JlIG9mIHRoZSB2YXJpYW5jZSBpbiBwb3Jvc2l0eSB0aGFuIGluIGFic29ycHRpb24uKioKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgUmVsaWdpb3NpdHkKCiMjIyBDb2xsYXBzaW5nIGFjcm9zcyBzaXRlcwoKRG8gdGhlIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSwgb24gdGhlIG9uZSBoYW5kLCBhbmQgc3Bpcml0dWFsIGV4cGVyaWVuY2UsIG9uIHRoZSBvdGhlciBoYW5kLCBzdGlsbCBob2xkIGV2ZW4gYWZ0ZXIgY29udHJvbGxpbmcgZm9yIHBhcnRpY2lwYW50cycgc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eT8KCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC45fQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgICBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLCBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZykpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2RlbV9ob3cuc3BydC5yZWxnLCB5ID0gc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWVfeSIpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV9zbW9vdGgobWV0aG9kID0gImxtIiwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXBzIGJldHdlZW4gc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBhbmQgc2NhbGVzIG9mIGludGVyZXN0IiwKICAgICAgIHggPSAiQWdyZWVtZW50IHdpdGggdGhlIHN0YXRlbWVudCAnSSBjb25zaWRlciBteXNlbGYgYSByZWxpZ2lvdXMgb3Igc3Bpcml0dWFsIHBlcnNvbi4nIiwgCiAgICAgICB5ID0gIlNjb3JlIikKYGBgCgpgYGB7cn0KZF9zdGRfcmVsaWcgPC0gZDAgJT4lICMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZykgJT4lCiAgbXV0YXRlKHJlbGlnX3N0ZCA9IHNjYWxlKHA3X2RlbV9ob3cuc3BydC5yZWxnLCBzY2FsZSA9IFQpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGQpCgpkX2g4IDwtIGRfc3RkX3JlbGlnICU+JQogIGdhdGhlcihzY2FsZSwgZXhwZXJpZW5jZSwgYyhkc2UsIHNlKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZmFjdG9yKHNjYWxlKSkKCmNvbnRyYXN0cyhkX2g4JHNjYWxlKSA8LSBjb250ci5zdW0oMikKY29udHJhc3RzKGRfaDgkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI4X3BvciA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSAqIHA3X2N0cnkgKyAKICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCBkX2g4KQojIHN1bW1hcnkocjhfcG9yKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0Kc3VtbWFyeShyOF9wb3IpJGNvZWZmaWNpZW50cyAlPiUKICBkYXRhLmZyYW1lKCkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICByZW5hbWUoYiA9IEVzdGltYXRlLCBgc3RhbmRhcmQgZXJyb3JgID0gU3RkLi5FcnJvciwgYHRgID0gdC52YWx1ZSwKICAgICAgICAgcCA9IFByLi4udC4uKSAlPiUKICBtdXRhdGVfYXQodmFycygtcGFyYW1ldGVyLCAtcCksIGZ1bnMocm91bmQoLiwgMikpKSAlPiUKICBtdXRhdGUocCA9IGlmZWxzZShwIDwgMC4wMDEsICI8MC4wMDEiLCByb3VuZChwLCAzKSksCiAgICAgICAgIHNpZ25pZmljYW50ID0gaWZlbHNlKHAgPCAwLjA1LCAiKiIsICIiKSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICByb3dfc3BlYygyOjQsIGJvbGQgPSBUKQpgYGAKCmBgYHtyfQpyOF9tbSA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBtbSAqIHJlbGlnX3N0ZCAqIHNjYWxlICogcDdfY3RyeSArIAogICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgZF9oOCkKIyBzdW1tYXJ5KHI4X21tKQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gRn0Kc3VtbWFyeShyOF9tbSkkY29lZmZpY2llbnRzICU+JQogIGRhdGEuZnJhbWUoKSAlPiUKICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1wYXJhbWV0ZXIsIC1wKSwgZnVucyhyb3VuZCguLCAyKSkpICU+JQogIG11dGF0ZShwID0gaWZlbHNlKHAgPCAwLjAwMSwgIjwwLjAwMSIsIHJvdW5kKHAsIDMpKSwKICAgICAgICAgc2lnbmlmaWNhbnQgPSBpZmVsc2UocCA8IDAuMDUsICIqIiwgIiIpKSAlPiUKICBrYWJsZShhbGlnbiA9IGMoImwiLCByZXAoInIiLCA1KSwgImwiKSkgJT4lCiAga2FibGVfc3R5bGluZygpICU+JQogIHJvd19zcGVjKDI6NCwgYm9sZCA9IFQpCmBgYAoKRm9sbG93aW5nIG90aGVyIGFuYWx5c2lzLCBJIGV4YW1pbmVkIHRoaXMgc2VwYXJhdGVseSB1c2luZyBQb3Jvc2l0eSAoRHVsaW4pIGFuZCBNYXJ0aGEgU3RvcnkgYXMgaW5kaWNlcyBvZiBwb3Jvc2l0eS4gSW4gYm90aCBjYXNlcywgcmVsaWdpb3NpdHkgd2FzIGEgc2lnbmlmaWNhbnQgcG9zaXRpdmUgcHJlZGljdG9yIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIChhcyB3ZSdkIGV4cGVjdCkuIEJ1dCwgaW1wb3J0YW50bHksIHRoZSBtYWluIGVmZmVjdHMgb2YgcG9yb3NpdHkgcmVtYWluZWQgc2lnbmlmaWNhbnRseSBwb3NpdGl2ZSBpbiBib3RoIGFuYWx5c2VzLCBldmVuIGFmdGVyIGNvbnRyb2xsaW5nIGZvciBwYXJ0aWNpcGFudHMnIHNlbGYtcmVwb3J0ZWQgcmVsaWdpb3NpdHkgKHNlZSBib2xkZWQgcm93cyBpbiB0YWJsZXMgYWJvdmUpLiBUaGUgbWFpbiBlZmZlY3Qgb2YgYWJzb3JwdGlvbiByZW1haW5lZCBzaWduaWZpY2FudGx5IHBvc2l0aXZlIHdoZW4gcG9yb3NpdHkgd2FzIGluZGV4ZWQgYnkgdGhlIE1hcnRoYSBTdG9yeSAoc2Vjb25kIHRhYmxlKSwgYnV0IG5vdCB3aGVuIHBvcm9zaXR5IHdhcyBpbmRleGVkIGJ5IHRoZSBQb3Jvc2l0eSAoRHVsaW4pIHNjYWxlIChhbHRob3VnaCBzb21lIHdvdWxkIGNvbnNpZGVyIHRoaXMgZWZmZWN0IHRvIGJlICJtYXJnaW5hbGx5IHNpZ25pZmljYW50IikuCgoqKk15IHRha2UtYXdheSBoZXJlIGlzIHRoYXQgcmVsaWdpb3NpdHkgZG9lcyBfbm90XyBmdWxseSAiZXhwbGFpbiBhd2F5IiB0aGUgb2JzZXJ2ZWQgcmVsYXRpb25zaGlwcyBiZXR3ZWVuIGFic29ycHRpb24gYW5kIHBvcm9zaXR5LCBvbiB0aGUgb25lIGhhbmQsIGFuZCBzcGlyaXR1YWwgZXhwZXJpZW5jZSwgb24gdGhlIG90aGVyLioqCgojIyMgSW4gZWFjaCBzaXRlIGNvbnNpZGVyZWQgYWxvbmUKCkhlcmUgSSBjb25kdWN0IGEgc2V0IG9mIHBhcmFsbGVsIGFuYWx5c2VzLCBjb25zaWRlcmluZyBlYWNoIHNpdGUgYWxvbmUuCgpgYGB7cn0KZF9zdGRfYnlzaXRlX3JlbGlnIDwtIGQwICU+JSAjIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfZGVtX2hvdy5zcHJ0LnJlbGcpICU+JQogIG11dGF0ZShyZWxpZ19zdGQgPSBzY2FsZShwN19kZW1faG93LnNwcnQucmVsZywgc2NhbGUgPSBUKSkgJT4lCiAgZnVsbF9qb2luKGRfc3RkX2J5c2l0ZSkKCmRfaDhfYnlzaXRlIDwtIGRfc3RkX2J5c2l0ZV9yZWxpZyAlPiUKICBnYXRoZXIoc2NhbGUsIGV4cGVyaWVuY2UsIGMoZHNlLCBzZSkpICU+JQogIG11dGF0ZShzY2FsZSA9IGZhY3RvcihzY2FsZSkpCgpjb250cmFzdHMoZF9oOF9ieXNpdGUkc2NhbGUpIDwtIGNvbnRyLnN1bSgyKQpjb250cmFzdHMoZF9oOF9ieXNpdGUkcDdfY3RyeSkgPC0gY29udHIuc3VtKDUpCmBgYAoKYGBge3J9CnI4X2J5c2l0ZV9wb3JfdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgIGRfaDhfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVVMiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdXMpCgpyOF9ieXNpdGVfcG9yX2doIDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfcG9yX2doKQoKcjhfYnlzaXRlX3Bvcl90aCA8LSBsbWVyKGV4cGVyaWVuY2UgfiBhYnMgKiBwb3IgKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICAoMSB8IHA3X3N1YmopLCAKICAgICAgICAgICAgICAgICAgZF9oOF9ieXNpdGUgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJUaGFpbGFuZCIpKQojIHN1bW1hcnkocjhfYnlzaXRlX3Bvcl90aCkKCnI4X2J5c2l0ZV9wb3JfY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogcG9yICogcmVsaWdfc3RkICogc2NhbGUgKyAKICAgICAgICAgICAgICAgICAgICAgICAgICAgKDEgfCBwN19zdWJqKSwgCiAgICAgICAgICAgICAgICAgIGRfaDhfYnlzaXRlICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiQ2hpbmEiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfY2gpCgpyOF9ieXNpdGVfcG9yX3Z0IDwtIGxtZXIoZXhwZXJpZW5jZSB+IGFicyAqIHBvciAqIHJlbGlnX3N0ZCAqIHNjYWxlICsgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdnQpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBGfQpyYmluZChzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdXMpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJVUyIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdGgpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJUaGFpbGFuZCIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfY2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJDaGluYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9wb3JfdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDE2KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDE3LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAzMywgNDgpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgNDksIDY0KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNjUsIDgwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCA2NiwgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDY3LCAxNikpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNCwgNjgsIDE2KSksIGJvbGQgPSBUKQpgYGAKCkFuZCBoZXJlIGFyZSBvdXIgcmVzdWx0cyB1c2luZyB0aGUgTWFydGhhIFN0b3J5IHNjYWxlOiAKCmBgYHtyfQpyOF9ieXNpdGVfbW1fdXMgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fdXMpCgpyOF9ieXNpdGVfbW1fZ2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkdoYW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fZ2gpCgpyOF9ieXNpdGVfbW1fdGggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlRoYWlsYW5kIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fdGgpCgpyOF9ieXNpdGVfbW1fY2ggPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikpCiMgc3VtbWFyeShyOF9ieXNpdGVfbW1fY2gpCgpyOF9ieXNpdGVfbW1fdnQgPC0gbG1lcihleHBlcmllbmNlIH4gYWJzICogbW0gKiByZWxpZ19zdGQgKiBzY2FsZSArIAogICAgICAgICAgICAgICAgICAgICAgICAgICgxIHwgcDdfc3ViaiksIAogICAgICAgICAgICAgICAgICAgICAgICBkX2g4X2J5c2l0ZSAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIlZhbnVhdHUiKSkKIyBzdW1tYXJ5KHI4X2J5c2l0ZV9tbV92dCkKYGBgCgpgYGB7ciwgaW5jbHVkZSA9IEZ9CnJiaW5kKHN1bW1hcnkocjhfYnlzaXRlX21tX3VzKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiVVMiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfbW1fZ2gpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJHaGFuYSIpLAogICAgICBzdW1tYXJ5KHI4X2J5c2l0ZV9tbV90aCkkY29lZmZpY2llbnRzICU+JQogICAgICAgIGRhdGEuZnJhbWUoKSAlPiUKICAgICAgICByb3duYW1lc190b19jb2x1bW4oInBhcmFtZXRlciIpICU+JQogICAgICAgIG11dGF0ZShzaXRlID0gIlRoYWlsYW5kIiksCiAgICAgIHN1bW1hcnkocjhfYnlzaXRlX21tX2NoKSRjb2VmZmljaWVudHMgJT4lCiAgICAgICAgZGF0YS5mcmFtZSgpICU+JQogICAgICAgIHJvd25hbWVzX3RvX2NvbHVtbigicGFyYW1ldGVyIikgJT4lCiAgICAgICAgbXV0YXRlKHNpdGUgPSAiQ2hpbmEiKSwKICAgICAgc3VtbWFyeShyOF9ieXNpdGVfbW1fdnQpJGNvZWZmaWNpZW50cyAlPiUKICAgICAgICBkYXRhLmZyYW1lKCkgJT4lCiAgICAgICAgcm93bmFtZXNfdG9fY29sdW1uKCJwYXJhbWV0ZXIiKSAlPiUKICAgICAgICBtdXRhdGUoc2l0ZSA9ICJWYW51YXR1IikpICU+JQogIHJlbmFtZShiID0gRXN0aW1hdGUsIGBzdGFuZGFyZCBlcnJvcmAgPSBTdGQuLkVycm9yLCBgdGAgPSB0LnZhbHVlLAogICAgICAgICBwID0gUHIuLi50Li4pICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHBhcmFtZXRlciwgcCwgc2l0ZSkpLCBmdW5zKHJvdW5kKC4sIDIpKSkgJT4lCiAgbXV0YXRlKHAgPSBpZmVsc2UocCA8IDAuMDAxLCAiPDAuMDAxIiwgcm91bmQocCwgMykpLAogICAgICAgICBzaWduaWZpY2FudCA9IGlmZWxzZShwIDwgMC4wNSwgIioiLCAiIikpICU+JQogIHNlbGVjdCgtc2l0ZSkgJT4lCiAga2FibGUoYWxpZ24gPSBjKCJsIiwgcmVwKCJyIiwgNSksICJsIikpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJVUyIsIDEsIDE2KSAlPiUKICBncm91cF9yb3dzKCJHaGFuYSIsIDE3LCAzMikgJT4lCiAgZ3JvdXBfcm93cygiVGhhaWxhbmQiLCAzMywgNDgpICU+JQogIGdyb3VwX3Jvd3MoIkNoaW5hIiwgNDksIDY0KSAlPiUKICBncm91cF9yb3dzKCJWYW51YXR1IiwgNjUsIDgwKSAlPiUKICByb3dfc3BlYyhjKHNlcSgyLCA2NiwgMTYpKSwgYm9sZCA9IFQpICU+JQogIHJvd19zcGVjKGMoc2VxKDMsIDY3LCAxNikpLCBib2xkID0gVCkgJT4lCiAgcm93X3NwZWMoYyhzZXEoNCwgNjgsIDE2KSksIGJvbGQgPSBUKQpgYGAKCkkgc2VlIHR3byBnZW5lcmFsIHBhdHRlcm5zIGhlcmU6CgoxLiBJbiB0aGUgVVMsIFRoYWksIGFuZCBDaGluZXNlIHNhbXBsZXMsIGFic29ycHRpb24sIHBvcm9zaXR5LCBhbmQgcmVsaWdpb3NpdHkgYWxsIHJlbWFpbiBzaWduaWZpY2FudCBwcmVkaWN0b3JzIG9mIHNwaXJpdHVhbCBleHBlcmllbmNlIHdoZW4gY29udHJvbGxpbmcgZm9yIGVhY2ggb3RoZXIgaW4gb25lIG9mIHRoZSB0d28gYW5hbHlzZXMgcmVwb3J0ZWQgYWJvdmUuIEluIHRoZSBvdGhlciBhbmFseXNpcywgdGhlcmUgaXMgc29tZSBldmlkZW5jZSBmb3IgInN3YW1waW5nIG91dCI6IEluIHRoZSBVUyBhbmQgQ2hpbmVzZSBzYW1wbGVzLCB0aGUgZWZmZWN0IG9mIGFic29ycHRpb24gYmVjb21lcyBub24tc2lnbmlmaWNhbnQgaW4gdGhlIG90aGVyIGFuYWx5c2lzOyBhbmQgaW4gVGhhaWxhbmQsIHRoZSBlZmZlY3Qgb2YgcG9yb3NpdHkgYmVjb21lcyBub24tc2lnbmlmaWNhbnQgaW4gdGhlIG90aGVyIGFuYWx5c2lzLiBHZW5lcmFsbHkgc3BlYWtpbmcsIHRob3VnaCwgKipJJ2Qgc2F5IHRoaXMgaXMgbW9kZXJhdGUgZXZpZGVuY2UgdGhhdCByZWxpZ2lvc2l0eSBkb2VzIF9ub3RfIGZ1bGx5ICJleHBsYWluIGF3YXkiIHRoZSBlZmZlY3RzIG9mIGFic29ycHRpb24gYW5kIHBvcm9zaXR5IGluIHRoZXNlIHRocmVlIHNpdGVzICh0aGUgVVMsIFRoYWlsYW5kLCBhbmQgQ2hpbmEpLioqCjIuIEluIEdoYW5hIGFuZCBWYW51YXR1LCBvbmx5IHJlbGlnaW9zaXR5IHJlbWFpbnMgYSBzaWduaWZpY2FudCBwcmVkaWN0b3Igb2Ygc3Bpcml0dWFsIGV4cGVyaWVuY2UgaW4gdGhlc2UgYW5hbHlzZXMuICoqVGhpcyBjb3VsZCBiZSBpbnRlcnByZXRlZCBhcyBldmlkZW5jZSB0aGF0IHJlbGlnaW9zaXR5IF9kb2VzXyAiZXhwbGFpbiBhd2F5IiB0aGUgZWZmZWN0cyBvZiBhYnNvcnB0aW9uIGFuZCBwb3Jvc2l0eSBpbiB0aGVzZSB0d28gKGRldm91dGx5IENocmlzdGlhbikgc2l0ZXMgKEdoYW5hIGFuZCBWYW51YXR1KS4qKgoKVG8gaGVscCB3aXRoIG91ciBpbnRlcnByZXRhdGlvbiwgaGVyZSBhcmUgdGhlIGNvcnJlbGF0aW9ucyB3aXRoIHJlbGlnaW9zaXR5LCB0aGlzIHRpbWUgbG9va2luZyBhdCBzY29yZXMgc3RhbmRhcmRpemVkIHdpdGhpbiBlYWNoIHNpdGU6CgpgYGB7cn0KZF9zdGRfYnlzaXRlX3JlbGlnX2NvciA8LSBkX3N0ZF9ieXNpdGVfcmVsaWcgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcmVsaWdfc3RkLCBhYnMsIHBvciwgbW0sIGRzZSwgc2UpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIHN1bW1hcmlzZShhYnMgPSBjb3IocmVsaWdfc3RkLCBhYnMsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwKICAgICAgICAgICAgcG9yID0gY29yKHJlbGlnX3N0ZCwgcG9yLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIG1tID0gY29yKHJlbGlnX3N0ZCwgbW0sIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSwKICAgICAgICAgICAgZHNlID0gY29yKHJlbGlnX3N0ZCwgZHNlLCB1c2UgPSAicGFpcndpc2UuY29tcGxldGUub2JzIiksCiAgICAgICAgICAgIHNlID0gY29yKHJlbGlnX3N0ZCwgc2UsIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZS5vYnMiKSkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBjb3JfcmVsaWcsIC1wN19jdHJ5KQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA1LCBmaWcuYXNwID0gMC45LCBpbmNsdWRlID0gVH0KZF9zdGRfYnlzaXRlX3JlbGlnICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHJlbGlnX3N0ZCwgYWJzLCBwb3IsIG1tLCBkc2UsIHNlKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCByZWxpZ19zdGQpKSAlPiUKICBmdWxsX2pvaW4oZF9zdGRfYnlzaXRlX3JlbGlnX2NvcikgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBTdG9yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgRXZlbnRzIikpICU+JQogIGdncGxvdChhZXMoeCA9IHJlbGlnX3N0ZCwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IHA3X2N0cnksIHNjYWxlcyA9ICJmcmVlX3kiKSArCiAgZ2VvbV9qaXR0ZXIoYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fc21vb3RoKG1ldGhvZCA9ICJsbSIsIGNvbG9yID0gImJsYWNrIikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnksIHNjYWxlLCBjb3JfcmVsaWcpICU+JSAKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1pbl94ID0gbWluKHJlbGlnX3N0ZCwgbmEucm0gPSBUKSwKICAgICAgICAgICAgICAgICAgICAgICAgIG1heF95ID0gbWF4KHNjb3JlLCBuYS5ybSA9IFQpKSAlPiUgCiAgICAgICAgICAgICAgIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBtdXRhdGUoeCA9IG1pbihtaW5feCkpICU+JQogICAgICAgICAgICAgICBncm91cF9ieShzY2FsZSkgJT4lCiAgICAgICAgICAgICAgIG11dGF0ZSh5ID0gbWF4KG1heF95KSkgJT4lCiAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgIGFlcyhsYWJlbCA9IHBhc3RlMCgiciA9ICIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvcm1hdChyb3VuZChjb3JfcmVsaWcsIDIpLCBuc21hbGwgPSAyKSksCiAgICAgICAgICAgICAgICAgeCA9IHgsIHkgPSB5KSwKICAgICAgICAgICAgIGhqdXN0ID0gMCwgdmp1c3QgPSAxLCBhbHBoYSA9IDAuNSwgY29sb3IgPSAiYmxhY2siKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJSZWxhdGlvbnNoaXBzIGJldHdlZW4gc2VsZi1yZXBvcnRlZCByZWxpZ2lvc2l0eSBhbmQgc2NhbGVzIG9mIGludGVyZXN0IiwKICAgICAgIHggPSAiQWdyZWVtZW50IHdpdGggdGhlIHN0YXRlbWVudCAnSSBjb25zaWRlciBteXNlbGYgYSByZWxpZ2lvdXMgb3Igc3Bpcml0dWFsIHBlcnNvbi4nIChzdGFuZGFyZGl6ZWQgd2l0aGluIGVhY2ggc2l0ZSkiLCAKICAgICAgIHkgPSAiU2NvcmUgKHN0YW5kYXJkaXplZCB3aXRoaW4gZWFjaCBzaXRlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBXaGljaCBleHBlcmllbmNlcyBhcmUgcHJlZGljdGVkIGJ5IGFic29ycHRpb24gdnMuIHBvcm9zaXR5PwoKIyMjIENvbGxhcHNpbmcgYWNyb3NzIHNpdGVzCgpgYGB7cn0KZF9leHAgPC0gZDAgJT4lICMgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywKICAgICAgICAgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbiIpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoImNoZWNrIiksIGVuZHNfd2l0aCgiX2NhdCIpLAogICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkpICU+JQogICMgc3RhbmRhcmRpemUgZXZlcnl0aGluZywgY29sbGFwc2luZyBhY3Jvc3Mgc2l0ZXMKICBtdXRhdGVfYXQodmFycygtYyhwN19jdHJ5LCBwN19zdWJqKSksIGZ1bnMoc2NhbGUoLiwgc2NhbGUgPSBUKSkpIAogICMgIyByZXNjYWxlIGV2ZXJ5dGhpbmcgdG8gcnVuIGZyb20gMC0xCiAgIyBtdXRhdGVfYXQodmFycygtYyhwN19jdHJ5LCBwN19zdWJqKSksIGZ1bnMoc2NhbGVzOjpyZXNjYWxlKC4sIHRvID0gYygwLCAxKSkpKQpgYGAKCmBgYHtyfQpkX2V4cF9jb3IgPC0gZF9leHAgJT4lIAogIHNlbGVjdChwN19zdWJqLCBwN19hYnNfdG90YWwsIAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfYWJzX3RvdGFsKSkgJT4lCiAgZ3JvdXBfYnkocXVlc3Rpb24pICU+JQogIHN1bW1hcmlzZShhYnNfY29yID0gY29yKHA3X2Fic190b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpKSAlPiUKICBmdWxsX2pvaW4oZF9leHAgJT4lIAogICAgICAgICAgICAgIHNlbGVjdChwN19zdWJqLCBwN19wb3JfdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfcG9yX3RvdGFsKSkgJT4lCiAgICAgICAgICAgICAgZ3JvdXBfYnkocXVlc3Rpb24pICU+JQogICAgICAgICAgICAgIHN1bW1hcmlzZShwb3JfY29yID0gY29yKHA3X3Bvcl90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVzZSA9ICJwYWlyd2lzZS5jb21wbGV0ZSIpKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfc3ViaiwgcDdfbW1fdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfc3ViaiwgcDdfbW1fdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG1tX2NvciA9IGNvcihwN19tbV90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBnYXRoZXIod2hpY2hfY29yLCBjb3IsIGVuZHNfd2l0aCgiX2NvciIpKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVudXN1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiksCiAgICAgICAgIHdoaWNoX2NvciA9IHJlY29kZV9mYWN0b3Iod2hpY2hfY29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNfY29yIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yX2NvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tX2NvciIgPSAiTWFydGhhIFN0b3J5IikpCmBgYAoKSGVyZSBhcmUgdGhlIHRvcCB0ZW4gbW9zdCBzdHJvbmdseSBjb3JyZWxhdGVkIGl0ZW1zIGZvciBlYWNoIG9mIG91ciB0aHJlZSBwcmVkaWN0b3JzIG9mIGludGVyZXN0IChBYnNvcnB0aW9uLCBQb3Jvc2l0eSAoRHVsaW4pLCBhbmQgTWFydGhhIFN0b3J5KToKCmBgYHtyLCBpbmNsdWRlID0gVH0KYmluZF9yb3dzKGRfZXhwX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiQWJzb3JwdGlvbiIpICU+JQogICAgICAgICAgICB0b3BfbigxMCwgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICBkX2V4cF9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIlBvcm9zaXR5IChEdWxpbikiKSAlPiUKICAgICAgICAgICAgdG9wX24oMTAsIGFicyhjb3IpKSAlPiUKICAgICAgICAgICAgdW5ncm91cCgpLAogICAgICAgICAgZF9leHBfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJNYXJ0aGEgU3RvcnkiKSAlPiUKICAgICAgICAgICAgdG9wX24oMTAsIGFicyhjb3IpKSAlPiUKICAgICAgICAgICAgdW5ncm91cCgpKSAlPiUKICBhcnJhbmdlKHdoaWNoX2NvciwgZGVzYyhhYnMoY29yKSkpICU+JQogIHNlbGVjdChjb3IsIHF1ZXN0aW9uX3RleHQsIHNjYWxlKSAlPiUKICByZW5hbWUoQ29ycmVsYXRpb24gPSBjb3IsIGBRdWVzdGlvbiB0ZXh0YCA9IHF1ZXN0aW9uX3RleHQsIFNjYWxlID0gc2NhbGUpICU+JQogIGthYmxlKGRpZ2l0cyA9IDMpICU+JQogIGthYmxlX3N0eWxpbmcoKSAlPiUKICBncm91cF9yb3dzKCJBYnNvcnB0aW9uIiwgMSwgMTApICU+JQogIGdyb3VwX3Jvd3MoIlBvcm9zaXR5IChEdWxpbikiLCAxMSwgMjApICU+JQogIGdyb3VwX3Jvd3MoIk1hcnRoYSBTdG9yeSIsIDIxLCAzMCkKYGBgCgpBbmQgaGVyZSdzIGEgdmlzdWFsaXphdGlvbiBvZiB0aGUgY29ycmVsYXRpb25zIG9mIHRoZXNlIHRocmVlIHByZWRpY3RvcnMgd2l0aCBhbGwgImV4cGVyaWVuY2UiIGl0ZW1zIGluIHRoaXMgcGFja2V0IChzcGlyaXR1YWwgYW5kIHNlY3VsYXIpOgoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAyLCBpbmNsdWRlID0gVH0KZ2dwbG90KGRfZXhwX2NvciAlPiUKICAgICAgICAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA4MCkpLAogICAgICAgYWVzKHggPSBjb3IsIHkgPSByZW9yZGVyKHF1ZXN0aW9uX3RleHQsIGRlc2Mob3JkZXIpKSwgCiAgICAgICAgICAgY29sb3IgPSB3aGljaF9jb3IpKSArCiAgZmFjZXRfZ3JpZChzY2FsZSB+IC4sIHNjYWxlcyA9ICJmcmVlIiwgc3BhY2UgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50KCkgKwogIGxhYnMoeCA9ICJQZWFyc29uIGNvcnJlbGF0aW9uICh0aGVvcmV0aWNhbCByYW5nZTogLTEgdG8gMSkiLAogICAgICAgeSA9ICJRdWVzdGlvbiAoYnkgc2NhbGUpIiwKICAgICAgIGNvbG9yID0gIlByZWRpY3RvciIpCmBgYAoKIyMjIENvbnNpZGVyaW5nIGVhY2ggc2l0ZSBpbmRpdmlkdWFsbHkKCmBgYHtyfQpkX2V4cF9ieXNpdGUgPC0gZDAgJT4lICMgYWxsIHBhcnRpY2lwYW50cwogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1faG93LnNwcnQucmVsZywKICAgICAgICAgcDdfYWJzX3RvdGFsLCBwN19wb3JfdG90YWwsIHA3X21tX3RvdGFsLAogICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbiIpKSAlPiUKICBzZWxlY3QoLWMoY29udGFpbnMoImNoZWNrIiksIGVuZHNfd2l0aCgiX2NhdCIpLAogICAgICAgICAgICBwN19kc2VfdG90YWwsIHA3X3NlX3RvdGFsLCBwN191bmV2X3RvdGFsLCBwN19leHNlbl90b3RhbCkpICU+JQogICMgc3RhbmRhcmRpemUgZXZlcnl0aGluZywgd2l0aGluIGVhY2ggc2l0ZQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZSguLCBzY2FsZSA9IFQpKSkgJT4lCiAgIyAjIHJlc2NhbGUgZXZlcnl0aGluZyB0byBydW4gZnJvbSAwLTEKICAjIG11dGF0ZV9hdCh2YXJzKC1jKHA3X2N0cnksIHA3X3N1YmopKSwgZnVucyhzY2FsZXM6OnJlc2NhbGUoLiwgdG8gPSBjKDAsIDEpKSkpCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CmRfZXhwX2J5c2l0ZV9jb3IgPC0gZF9leHBfYnlzaXRlICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsLCAKICAgICAgICAgY29udGFpbnMoIl9kc2VfIiksIGNvbnRhaW5zKCJfc2VfIiksIAogICAgICAgICBjb250YWlucygiX3VuZXZfIiksIGNvbnRhaW5zKCJfZXhzZW5fIikpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmosIHA3X2Fic190b3RhbCkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UoYWJzX2NvciA9IGNvcihwN19hYnNfdG90YWwsIHJlc3BvbnNlLCAKICAgICAgICAgICAgICAgICAgICAgICAgICB1c2UgPSAicGFpcndpc2UuY29tcGxldGUiKSkgJT4lCiAgZnVsbF9qb2luKGRfZXhwX2J5c2l0ZSAlPiUgCiAgICAgICAgICAgICAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3Bvcl90b3RhbCwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfZHNlXyIpLCBjb250YWlucygiX3NlXyIpLCAKICAgICAgICAgICAgICAgICAgICAgY29udGFpbnMoIl91bmV2XyIpLCBjb250YWlucygiX2V4c2VuXyIpKSAlPiUKICAgICAgICAgICAgICBnYXRoZXIocXVlc3Rpb24sIHJlc3BvbnNlLCAtYyhwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKHBvcl9jb3IgPSBjb3IocDdfcG9yX3RvdGFsLCByZXNwb25zZSwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBmdWxsX2pvaW4oZF9leHBfYnlzaXRlICU+JSAKICAgICAgICAgICAgICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwsIAogICAgICAgICAgICAgICAgICAgICBjb250YWlucygiX2RzZV8iKSwgY29udGFpbnMoIl9zZV8iKSwgCiAgICAgICAgICAgICAgICAgICAgIGNvbnRhaW5zKCJfdW5ldl8iKSwgY29udGFpbnMoIl9leHNlbl8iKSkgJT4lCiAgICAgICAgICAgICAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaiwgcDdfbW1fdG90YWwpKSAlPiUKICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCBxdWVzdGlvbikgJT4lCiAgICAgICAgICAgICAgc3VtbWFyaXNlKG1tX2NvciA9IGNvcihwN19tbV90b3RhbCwgcmVzcG9uc2UsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdXNlID0gInBhaXJ3aXNlLmNvbXBsZXRlIikpKSAlPiUKICBnYXRoZXIod2hpY2hfY29yLCBjb3IsIGVuZHNfd2l0aCgiX2NvciIpKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBFdmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVudXN1YWwgRXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiksCiAgICAgICAgIHdoaWNoX2NvciA9IHJlY29kZV9mYWN0b3Iod2hpY2hfY29yLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnNfY29yIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yX2NvciIgPSAiUG9yb3NpdHkgKER1bGluKSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tX2NvciIgPSAiTWFydGhhIFN0b3J5IikpCmBgYAoKSGVyZSBhcmUgdGhlIHRvcCB0aHJlZSBtb3N0IHN0cm9uZ2x5IGNvcnJlbGF0ZWQgaXRlbXMgZm9yIGVhY2ggb2Ygb3VyIHRocmVlIHByZWRpY3RvcnMgb2YgaW50ZXJlc3QgKEFic29ycHRpb24sIFBvcm9zaXR5IChEdWxpbiksIGFuZCBNYXJ0aGEgU3RvcnkpOgoKYGBge3IsIGluY2x1ZGUgPSBUfQpiaW5kX3Jvd3MoZF9leHBfYnlzaXRlX2NvciAlPiUKICAgICAgICAgICAgZmlsdGVyKHdoaWNoX2NvciA9PSAiQWJzb3JwdGlvbiIpICU+JQogICAgICAgICAgICB0b3BfbigzLCBhYnMoY29yKSkgJT4lCiAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgIGRfZXhwX2J5c2l0ZV9jb3IgJT4lCiAgICAgICAgICAgIGZpbHRlcih3aGljaF9jb3IgPT0gIlBvcm9zaXR5IChEdWxpbikiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICBkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICAgICBmaWx0ZXIod2hpY2hfY29yID09ICJNYXJ0aGEgU3RvcnkiKSAlPiUKICAgICAgICAgICAgdG9wX24oMywgYWJzKGNvcikpICU+JQogICAgICAgICAgICB1bmdyb3VwKCkpICU+JQogIGFycmFuZ2Uod2hpY2hfY29yLCBwN19jdHJ5LCBkZXNjKGFicyhjb3IpKSkgJT4lCiAgc2VsZWN0KHA3X2N0cnksIGNvciwgcXVlc3Rpb25fdGV4dCwgc2NhbGUpICU+JQogIHJlbmFtZShTaXRlID0gcDdfY3RyeSwgQ29ycmVsYXRpb24gPSBjb3IsIAogICAgICAgICBgUXVlc3Rpb24gdGV4dGAgPSBxdWVzdGlvbl90ZXh0LCBTY2FsZSA9IHNjYWxlKSAlPiUKICBrYWJsZShkaWdpdHMgPSAzKSAlPiUKICBrYWJsZV9zdHlsaW5nKCkgJT4lCiAgY29sbGFwc2Vfcm93cygxOjIpICU+JQogIGdyb3VwX3Jvd3MoIkFic29ycHRpb24iLCAxLCAxNSkgJT4lCiAgZ3JvdXBfcm93cygiUG9yb3NpdHkgKER1bGluKSIsIDE2LCAzMCkgJT4lCiAgZ3JvdXBfcm93cygiTWFydGhhIFN0b3J5IiwgMzEsIDQ1KQpgYGAKCkFuZCBoZXJlJ3MgYSB2aXN1YWxpemF0aW9uIG9mIHRoZSBjb3JyZWxhdGlvbnMgb2YgdGhlc2UgdGhyZWUgcHJlZGljdG9ycyB3aXRoIGFsbCAiZXhwZXJpZW5jZSIgaXRlbXMgaW4gdGhpcyBwYWNrZXQgKHNwaXJpdHVhbCBhbmQgc2VjdWxhcik6CgpgYGB7ciwgZmlnLndpZHRoID0gNiwgZmlnLmFzcCA9IDEuOCwgaW5jbHVkZSA9IFR9CmdncGxvdChkX2V4cF9ieXNpdGVfY29yICU+JQogICAgICAgICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IHN0cl93cmFwKHF1ZXN0aW9uX3RleHQsIDgwKSksCiAgICAgICBhZXMoeCA9IGNvciwgeSA9IHJlb3JkZXIocXVlc3Rpb25fdGV4dCwgZGVzYyhvcmRlcikpLCAKICAgICAgICAgICBjb2xvciA9IHdoaWNoX2NvcikpICsKICBmYWNldF9ncmlkKHNjYWxlIH4gcDdfY3RyeSwgc2NhbGVzID0gImZyZWUiLCBzcGFjZSA9ICJmcmVlIikgKwogIGdlb21fcG9pbnQoKSArCiAgbGFicyh4ID0gIlBlYXJzb24gY29ycmVsYXRpb24gKHRoZW9yZXRpY2FsIHJhbmdlOiAtMSB0byAxKSIsCiAgICAgICB5ID0gIlF1ZXN0aW9uIChieSBzY2FsZSkiLAogICAgICAgY29sb3IgPSAiUHJlZGljdG9yIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFBvcm9zaXR5OiBnb29kIHZzLiBiYWQgZW1vdGlvbnMKCldoaWNoIGVtb3Rpb25zIHdlcmUgY29uc2lkZXJlZCBtb3N0ICJwb3RlbnQiIGluIG91ciBtZWFzdXJlcyBvZiBwb3Jvc2l0eT8KCiMjIyBQb3Jvc2l0eSBzY2FsZSAoRHVsaW4pCgpgYGB7cn0KZF9wb3IgPC0gZDAgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJfcG9yXyIpKSAlPiUKICBzZWxlY3QoLWMoZW5kc193aXRoKCJfY2F0IiksIGNvbnRhaW5zKCJ0b3RhbCIpLCBjb250YWlucygiY2hlY2siKSkpICU+JQogIGdhdGhlcihxdWVzdGlvbiwgcmVzcG9uc2UsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUodmFsID0gY2FzZV93aGVuKHF1ZXN0aW9uICVpbiUgCiAgICAgICAgICAgICAgICAgICAgICAgICAgIGMoInA3X3Bvcl9qb2Iud2lzaCIsICJwN19wb3JfY29uc2x0LnVuc2VlbiIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19wb3JfbWlyY2wucHJheWVyIiwgInA3X3Bvcl9wcnkuZGVhZC5iYWNrIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X3Bvcl9mYWxsLmluLmxvdiIsICJwN19wb3JfdGhncy5oZWFsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfcG9yX3Zpc3VhbGl6YXRpb24iKSB+IAogICAgICAgICAgICAgICAgICAgICAgICAgICAicG9zaXRpdmUiLAogICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb24gJWluJSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgYygicDdfcG9yX3RoZ3MuaHJ0IiwgInA3X3Bvcl93aWZpLnRoZ3MiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfcG9yX2FuZ3IuY250cmwiLCAicDdfcG9yX3NwcnQuZW52eSIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19wb3JfcmVhZC50aGdzIiwgInA3X3Bvcl9zdHJlLnNwb2lsIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X3Bvcl9zcGtuLmN1cnNlIiwgInA3X3Bvcl9jdXJzZS5zaWNrIiwgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X3Bvcl9zcHJ0LnB1dC50aGdzIikgfiAKICAgICAgICAgICAgICAgICAgICAgICAgICAgIm5lZ2F0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIFRSVUUgfiBOQV9jaGFyYWN0ZXJfKSwKICAgICAgICAgdmFsID0gZmFjdG9yKHZhbCwgbGV2ZWxzID0gYygibmVnYXRpdmUiLCAicG9zaXRpdmUiKSkpCgojIGNvbnRyYXN0cyhkX3BvciRwN19jdHJ5KSA8LSBjb250cmFzdHNfY3RyeV9lZmYKY29udHJhc3RzKGRfcG9yJHZhbCkgPC0gY2JpbmQoIl9uZWdfcG9zIiA9IGMoMCwgMSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjcsIGluY2x1ZGUgPSBUfQpwb3JfdmFsX3Bsb3RfYSA8LSBkX3BvciAlPiUgCiAgZmlsdGVyKCFpcy5uYSh2YWwpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIHZhbCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSB2YWwsIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSwgdmFsLCB2YWwpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMiwgMC4yNSkpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gcmVzcG9uc2VzIHRvIFBvcm9zaXR5IChEdWxpbikgcXVlc3Rpb25zIGJ5IHZhbGVuY2UiLAogICAgICAgc3VidGl0bGUgPSAiXG5WYWxlbmNlIGNvZGVkIGJ5IFRNTFxuUmVzcG9uc2Ugb3B0aW9uczogMCA9IGl0IGRvZXMgbm90IGhhcHBlbiwgMSA9IGl0IG1pZ2h0IGhhcHBlbiwgMiA9IGl0IGRlZmluaXRlbHkgaGFwcGVuc1xuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlZhbGVuY2UiLCAKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCgpwb3JfdmFsX3Bsb3RfYiA8LSBkX3BvciAlPiUgCiAgZmlsdGVyKCFpcy5uYSh2YWwpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIHZhbCkgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCB2YWwsIHZhbCkgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibWVhbl9zY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IHZhbCwgY29sb3IgPSBwN19jdHJ5KSkgKwogIGZhY2V0X3dyYXAofiBwN19jdHJ5LCBuY29sID0gNSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSA0LCBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyLCAwLjEpKSArCiAgbGFicyh0aXRsZSA9ICJNZWFuIHJlc3BvbnNlcyB0byBQb3Jvc2l0eSAoRHVsaW4pIHF1ZXN0aW9ucyBieSB2YWxlbmNlIiwKICAgICAgIHN1YnRpdGxlID0gIlxuVmFsZW5jZSBjb2RlZCBieSBUTUxcblJlc3BvbnNlIG9wdGlvbnM6IDAgPSBpdCBkb2VzIG5vdCBoYXBwZW4sIDEgPSBpdCBtaWdodCBoYXBwZW4sIDIgPSBpdCBkZWZpbml0ZWx5IGhhcHBlbnNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJWYWxlbmNlIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQoKcGxvdF9ncmlkKHBvcl92YWxfcGxvdF9hLCBwb3JfdmFsX3Bsb3RfYiwgbmNvbCA9IDEpCmBgYAoKVGhlIGl0ZW1zIGNvZGVkIGJ5IFRNTCBhcyAibmVnYXRpdmUiIHNlZW0gdG8gaGF2ZSBlbGljaXRlZCBzb21ld2hhdCBzdHJvbmdlciBlbmRvcnNlbWVudHMgdGhhbiB0aGUgaXRlbXMgY29kZWQgYXMgInBvc2l0aXZlLCIgdGhvdWdoIHRoaXMgZGlmZmVyZW5jZSBhcHBlYXJzIHRvIGhhdmUgYmVlbiBxdWl0ZSBzbWFsbCAobWF5YmUgbiBvdCBzaWduaWZpY2FudCkgaW4gdGhlIFVTIGFuZCBDaGluYS4gCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CldoYXQgYWJvdXQgd2hlbiB3ZSBsb29rIGF0IGluZGl2aWR1YWwgcXVlc2l0b25zPwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyLjIsIGluY2x1ZGUgPSBUfQpkX3BvciAlPiUgCiAgZmlsdGVyKCFpcy5uYSh2YWwpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGxlZnRfam9pbih2YXJfa2V5ICU+JSBzZWxlY3QocXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChwYXN0ZTAodG91cHBlcih2YWwpLCAiOiAiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90ZXh0KSwgMzUpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCAKICAgICAgICAgICAgIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCguIH4gcXVlc3Rpb25fdGV4dCwgbmNvbCA9IDMpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4wNSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSAwLjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCB2YWwsIHF1ZXN0aW9uLCBxdWVzdGlvbl90ZXh0KSAlPiUKICAgICAgICAgICAgICAgICAgICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJtZWFuX3Njb3JlIiwgbmEucm0gPSBUKSAlPiUKICAgICAgICAgICAgICAgICAgICB1bmdyb3VwKCksCiAgICAgICAgICAgICAgICAgIGFlcyh5ID0gbWVhbiwgeW1pbiA9IGNpX2xvd2VyLCB5bWF4ID0gY2lfdXBwZXIpLAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBjb2xvciA9ICJibGFjayIsCiAgICAgICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25fZG9kZ2Uod2lkdGggPSAwLjUpLAogICAgICAgICAgICAgICAgICBzaG93LmxlZ2VuZCA9IEYpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIsIGd1aWRlID0gIm5vbmUiKSArCiAgc2NhbGVfeV9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAyLCAwLjI1KSkgKwogIGxhYnModGl0bGUgPSAiTWVhbiByZXNwb25zZXMgdG8gUG9yb3NpdHkgKER1bGluKSBxdWVzdGlvbnMgYnkgdmFsZW5jZSIsCiAgICAgICBzdWJ0aXRsZSA9ICJcblZhbGVuY2UgY29kZWQgYnkgVE1MXG5SZXNwb25zZSBvcHRpb25zOiAwID0gaXQgZG9lcyBub3QgaGFwcGVuLCAxID0gaXQgbWlnaHQgaGFwcGVuLCAyID0gaXQgZGVmaW5pdGVseSBoYXBwZW5zXG5FcnJvciBiYXJzIGFyZSBib290c3RyYXBwZWQgOTUlIGNvbmZpZGVuY2UgaW50ZXJ2YWxzIiwKICAgICAgIHggPSAiU2l0ZSIsIAogICAgICAgeSA9ICJNZWFuIHJlc3BvbnNlIikKYGBgCgpJJ20gbm90IGdvaW5nIHRvIGNvbW1lbnQgb24gdGhpcyBhdCB0aGUgbW9tZW50LiAoQnV0IG5vdGUgdGhhdCBUaGFpbGFuZCB3YXMgbWlzc2luZyBxdWVzdGlvbiAjMTMgaW4gdGhpcyBzY2FsZSAtIHRocm91Z2hvdXQgdGhpcyBkb2N1bWVudCwgc2NvcmVzIGZvciBUaGFpbGFuZCBoYXZlIGJlZW4gYWRqdXN0ZWQgYWNjb3JkaW5nbHkgc28gdGhhdCBUaGFpIHBhcnRpY2lwYW50cyBkbyBub3QgaGF2ZSBhcnRpZmljYWxseSBkZWZsYXRlZCBQb3Jvc2l0eSBzY29yZXMhKQoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDIuMiwgaW5jbHVkZSA9IFR9CmRfcG9yICU+JSAKICBmaWx0ZXIoIWlzLm5hKHZhbCkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHZhbCwgcXVlc3Rpb24pICU+JQogIHN1bW1hcmlzZShtZWFuX3Njb3JlID0gbWVhbihyZXNwb25zZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc3VtX3Njb3JlID0gc3VtKHJlc3BvbnNlLCBuYS5ybSA9IFQpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgbGVmdF9qb2luKHZhcl9rZXkgJT4lIHNlbGVjdChxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCwgb3JkZXIpKSAlPiUKICBtdXRhdGUocXVlc3Rpb25fdGV4dCA9IHN0cl93cmFwKHBhc3RlMCh0b3VwcGVyKHZhbCksICI6ICIsIAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHF1ZXN0aW9uX3RleHQpLCAzNSkpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHZhbCwgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCAKICAgICAgICAgICAgIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCguIH4gcXVlc3Rpb25fdGV4dCwgbmNvbCA9IDMsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDIsIDAuMSkpICsKICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIlxuVmFsZW5jZSBjb2RlZCBieSBUTUxcblJlc3BvbnNlIG9wdGlvbnM6IDAgPSBpdCBkb2VzIG5vdCBoYXBwZW4sIDEgPSBpdCBtaWdodCBoYXBwZW4sIDIgPSBpdCBkZWZpbml0ZWx5IGhhcHBlbnNcbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJTaXRlIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMjIE1hcnRoYSBzdG9yeQoKYGBge3J9CmRfbW0gPC0gZDAgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJfbW1fIikpICU+JQogIHNlbGVjdCgtYyhlbmRzX3dpdGgoIl9jYXQiKSwgY29udGFpbnMoInRvdGFsIiksIGNvbnRhaW5zKCJjaGVjayIpKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShlbW8gPSBjYXNlX3doZW4oZ3JlcGwoIl9hbmdfIiwgcXVlc3Rpb24pIH4gImFuZ2VyIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGdyZXBsKCJfY2FyXyIsIHF1ZXN0aW9uKSB+ICJjYXJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgZ3JlcGwoIl9lbnZfIiwgcXVlc3Rpb24pIH4gImVudnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgVFJVRSB+IE5BX2NoYXJhY3Rlcl8pLAogICAgICAgICB2YWwgPSBjYXNlX3doZW4oZW1vICVpbiUgYygiYW5nZXIiLCAiZW52eSIpIH4gIm5lZ2F0aXZlIiwKICAgICAgICAgICAgICAgICAgICAgICAgIGVtbyA9PSAiY2FyaW5nIiB+ICJwb3NpdGl2ZSIsCiAgICAgICAgICAgICAgICAgICAgICAgICBUUlVFIH4gTkFfY2hhcmFjdGVyXyksCiAgICAgICAgIGVtbyA9IGZhY3RvcihlbW8sIGxldmVscyA9IGMoImFuZ2VyIiwgImVudnkiLCAiY2FyaW5nIikpLAogICAgICAgICB2YWwgPSBmYWN0b3IodmFsLCBsZXZlbHMgPSBjKCJuZWdhdGl2ZSIsICJwb3NpdGl2ZSIpKSkKCiMgY29udHJhc3RzKGRfbW0kcDdfY3RyeSkgPC0gY29udHJhc3RzX2N0cnlfZWZmCmNvbnRyYXN0cyhkX21tJGVtbykgPC0gY2JpbmQoIl9uZWdfcG9zIiA9IGMoMSwgMSwgLTIpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICJfZW52X2FuZyIgPSBjKC0xLCAxLCAwKSkKY29udHJhc3RzKGRfbW0kdmFsKSA8LSBjYmluZCgiX25lZ19wb3MiID0gYygwLCAxKSkKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNywgaW5jbHVkZSA9IFR9Cm1tX2Vtb19wbG90X2EgPC0gZF9tbSAlPiUgCiAgZmlsdGVyKCFpcy5uYShlbW8pKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqLCB2YWwsIGVtbykgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBlbW8sIHkgPSBtZWFuX3Njb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+IHA3X2N0cnkpICsKICBnZW9tX2ppdHRlcihhbHBoYSA9IDAuMikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSwgdmFsLCBlbW8pICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGNvbG9yID0gImJsYWNrIiwgZmF0dGVuID0gMiwgc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiLCBndWlkZSA9ICJub25lIikgKwogIHNjYWxlX3lfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMywgMSkpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gcmVzcG9uc2VzIHRvIE1hcnRoYSBTdG9yeSBxdWVzdGlvbnMgYnkgZW1vdGlvbiIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZXNwb25zZSBvcHRpb25zOiAwID0gbmV2ZXIsIDEgPSByYXJlbHksIDIgPSBvZnRlbiwgMyA9IHZlcnkgb2Z0ZW5cbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJFbW90aW9uIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQoKbW1fZW1vX3Bsb3RfYiA8LSBkX21tICU+JSAKICBmaWx0ZXIoIWlzLm5hKGVtbykpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHZhbCwgZW1vKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHZhbCwgZW1vKSAlPiUKICBtdWx0aV9ib290X3N0YW5kYXJkKGNvbCA9ICJtZWFuX3Njb3JlIiwgbmEucm0gPSBUKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gZW1vLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+IHA3X2N0cnksIG5jb2wgPSA1LCBzY2FsZXMgPSAiZnJlZSIpICsKICBnZW9tX3BvaW50cmFuZ2UoYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDQsIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMsIDAuMjUpKSArCiAgbGFicyh0aXRsZSA9ICIoem9vbWVkIGluKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZXNwb25zZSBvcHRpb25zOiAwID0gbmV2ZXIsIDEgPSByYXJlbHksIDIgPSBvZnRlbiwgMyA9IHZlcnkgb2Z0ZW5cbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJFbW90aW9uIiwgCiAgICAgICB5ID0gIk1lYW4gcmVzcG9uc2UiKQoKcGxvdF9ncmlkKG1tX2Vtb19wbG90X2EsIG1tX2Vtb19wbG90X2IsIG5jb2wgPSAxKQpgYGAKClRvIG15IGV5ZXMsIHRoZXJlIGlzIG5vIHNpbmdsZSBwYXR0ZXJuIGhlcmU6IEluIHRoZSBVUyBhbmQgQ2hpbmEsIGNhcmluZyBzZWVtcyB0byBoYXZlIGVsaWNpdGVkIHN0cm9uZ2VyIHJlc3BvbnNlcyB0aGFuIHRoZSBvdGhlciBlbW90aW9uczsgaW4gVmFudWF0dSBhbmQgcG9zc2libHkgVGhhaWxhbmQsIGFuZ2VyIHNlZW1zIHRvIGhhdmUgZWxpY3RlZCBzdHJvbmdlciByZXNwb25zZXM7IGluIEdoYW5hLCB0aGUgdGhyZWUgZW1vdGlvbnMgc2VlbSB0byBoYXZlIGVsaWNpdGVkIHJvdWdobHkgc2ltaWxhciByZXNwb25zZXMuCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CldoYXQgYWJvdXQgd2hlbiB3ZSBsb29rIGF0IGluZGl2aWR1YWwgcXVlc2l0b25zPwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAxLjIsIGluY2x1ZGUgPSBUfQpkX21tICU+JSAKICBmaWx0ZXIoIWlzLm5hKGVtbykpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHA3X3N1YmosIHZhbCwgZW1vLCBxdWVzdGlvbikgJT4lCiAgc3VtbWFyaXNlKG1lYW5fc2NvcmUgPSBtZWFuKHJlc3BvbnNlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBzdW1fc2NvcmUgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBsZWZ0X2pvaW4odmFyX2tleSAlPiUgc2VsZWN0KHF1ZXN0aW9uLCBxdWVzdGlvbl90ZXh0LCBvcmRlcikpICU+JQogIG11dGF0ZShxdWVzdGlvbl90ZXh0ID0gc3RyX3dyYXAocXVlc3Rpb25fdGV4dCwgNDApLAogICAgICAgICBxdWVzdGlvbl90eXBlID0gY2FzZV93aGVuKAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX2ZlZWwuaHVydCIsICJwN19tbV9jYXJfZmVsLm5vLnByIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl9mZWVsLmh1cnQiKSB+IAogICAgICAgICAgICAgImEuIGh1cnQvaGVscCB3aXRoIGZlZWxpbmdzIiwKICAgICAgICAgICBxdWVzdGlvbiAlaW4lIGMoInA3X21tX2FuZ190aGdzLmh1cnQiLCAicDdfbW1fY2FyX3Roay5uby5wciIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19tbV9lbnZfdGhncy5odXJ0IikgfiAKICAgICAgICAgICAgICJiLiBodXJ0L2hlbHAgd2l0aCBqdXN0IHRob3VnaHRzIiwKICAgICAgICAgICBxdWVzdGlvbiAlaW4lIGMoInA3X21tX2FuZ19zcHJ0Lmh1cnQiLCAicDdfbW1fY2FyX3NwcnQuaGVscCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19tbV9lbnZfc3BydC5odXJ0IikgfiAKICAgICAgICAgICAgICJjLiBodXJ0L2hlbHAgdmlhIHNwaXJpdCIsCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfcGh5c2ljYWwiLCAicDdfbW1fY2FyX3BoeXNpY2FsIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl9waHlzaWNhbCIpIH4gCiAgICAgICAgICAgICAiZC4gcGh5c2ljYWxseSBzaWNrL3dlbGwiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3NpY2tuZXNzIiwgInA3X21tX2Nhcl9jdXJpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X3NpY2tuZXNzIikgfiAKICAgICAgICAgICAgICJlLiBjYXVzZSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBlbW8sIAogICAgICAgICAgICAgeSA9IG1lYW5fc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKHN0cl93cmFwKHF1ZXN0aW9uX3R5cGUsIDIwKSB+IHA3X2N0cnkpICsKICBnZW9tX3BvaW50KGFscGhhID0gMC4wNSwKICAgICAgICAgICAgIHBvc2l0aW9uID0gcG9zaXRpb25faml0dGVyZG9kZ2Uoaml0dGVyLndpZHRoID0gMiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaml0dGVyLmhlaWdodCA9IDAuMywKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZG9kZ2Uud2lkdGggPSAwLjUpKSArCiAgZ2VvbV9wb2ludHJhbmdlKGRhdGEgPSAuICU+JSAKICAgICAgICAgICAgICAgICAgICBncm91cF9ieShwN19jdHJ5LCB2YWwsIGVtbywgCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcXVlc3Rpb25fdHlwZSwgcXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQpICU+JQogICAgICAgICAgICAgICAgICAgIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gIm1lYW5fc2NvcmUiLCBuYS5ybSA9IFQpICU+JQogICAgICAgICAgICAgICAgICAgIHVuZ3JvdXAoKSwKICAgICAgICAgICAgICAgICAgYWVzKHkgPSBtZWFuLCB5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksCiAgICAgICAgICAgICAgICAgIGZhdHRlbiA9IDIsIGNvbG9yID0gImJsYWNrIiwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gRikgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMsIDEpKSArCiAgIyB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDkwLCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBsYWJzKHRpdGxlID0gIk1lYW4gcmVzcG9uc2VzIHRvIE1hcnRoYSBTdG9yeSBxdWVzdGlvbnMgYnkgaXRlbSIsCiAgICAgICBzdWJ0aXRsZSA9ICJSZXNwb25zZSBvcHRpb25zOiAwID0gbmV2ZXIsIDEgPSByYXJlbHksIDIgPSBvZnRlbiwgMyA9IHZlcnkgb2Z0ZW5cbkVycm9yIGJhcnMgYXJlIGJvb3RzdHJhcHBlZCA5NSUgY29uZmlkZW5jZSBpbnRlcnZhbHMiLAogICAgICAgeCA9ICJRdWVzdGlvbiB0eXBlIiwKICAgICAgIHkgPSAiTWVhbiByZXNwb25zZSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDEuMiwgaW5jbHVkZSA9IFR9CmRfbW0gJT4lIAogIGZpbHRlcighaXMubmEoZW1vKSkgJT4lCiAgZ3JvdXBfYnkocDdfY3RyeSwgcDdfc3ViaiwgdmFsLCBlbW8sIHF1ZXN0aW9uKSAlPiUKICBzdW1tYXJpc2UobWVhbl9zY29yZSA9IG1lYW4ocmVzcG9uc2UsIG5hLnJtID0gVCksCiAgICAgICAgICAgIHN1bV9zY29yZSA9IHN1bShyZXNwb25zZSwgbmEucm0gPSBUKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIGxlZnRfam9pbih2YXJfa2V5ICU+JSBzZWxlY3QocXVlc3Rpb24sIHF1ZXN0aW9uX3RleHQsIG9yZGVyKSkgJT4lCiAgbXV0YXRlKHF1ZXN0aW9uX3RleHQgPSBzdHJfd3JhcChxdWVzdGlvbl90ZXh0LCA0MCksCiAgICAgICAgIHF1ZXN0aW9uX3R5cGUgPSBjYXNlX3doZW4oCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfZmVlbC5odXJ0IiwgInA3X21tX2Nhcl9mZWwubm8ucHIiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X2ZlZWwuaHVydCIpIH4gCiAgICAgICAgICAgICAiYS4gaHVydC9oZWxwIHdpdGggZmVlbGluZ3MiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3RoZ3MuaHVydCIsICJwN19tbV9jYXJfdGhrLm5vLnByIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl90aGdzLmh1cnQiKSB+IAogICAgICAgICAgICAgImIuIGh1cnQvaGVscCB3aXRoIGp1c3QgdGhvdWdodHMiLAogICAgICAgICAgIHF1ZXN0aW9uICVpbiUgYygicDdfbW1fYW5nX3NwcnQuaHVydCIsICJwN19tbV9jYXJfc3BydC5oZWxwIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgInA3X21tX2Vudl9zcHJ0Lmh1cnQiKSB+IAogICAgICAgICAgICAgImMuIGh1cnQvaGVscCB2aWEgc3Bpcml0IiwKICAgICAgICAgICBxdWVzdGlvbiAlaW4lIGMoInA3X21tX2FuZ19waHlzaWNhbCIsICJwN19tbV9jYXJfcGh5c2ljYWwiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAicDdfbW1fZW52X3BoeXNpY2FsIikgfiAKICAgICAgICAgICAgICJkLiBwaHlzaWNhbGx5IHNpY2svd2VsbCIsCiAgICAgICAgICAgcXVlc3Rpb24gJWluJSBjKCJwN19tbV9hbmdfc2lja25lc3MiLCAicDdfbW1fY2FyX2N1cmluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICJwN19tbV9lbnZfc2lja25lc3MiKSB+IAogICAgICAgICAgICAgImUuIGNhdXNlIikpICU+JQogIGdyb3VwX2J5KHA3X2N0cnksIHZhbCwgZW1vLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICBxdWVzdGlvbl90eXBlLCBxdWVzdGlvbiwgcXVlc3Rpb25fdGV4dCkgJT4lCiAgICAgICAgICAgICAgICAgICAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAibWVhbl9zY29yZSIsIG5hLnJtID0gVCkgJT4lCiAgICAgICAgICAgICAgICAgICAgdW5ncm91cCgpICU+JQogIGdncGxvdChhZXMoeCA9IGVtbywgY29sb3IgPSBwN19jdHJ5LCBzaGFwZSA9IGVtbykpICsKICBmYWNldF9ncmlkKHN0cl93cmFwKHF1ZXN0aW9uX3R5cGUsIDIwKSB+IHA3X2N0cnksIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21fcG9pbnRyYW5nZShhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgcG9zaXRpb24gPSBwb3NpdGlvbl9kb2RnZSh3aWR0aCA9IDAuNSksCiAgICAgICAgICAgICAgICAgIHNob3cubGVnZW5kID0gVCkgKwogIHNjYWxlX2NvbG9yX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIiwgZ3VpZGUgPSAibm9uZSIpICsKICBzY2FsZV95X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMsIDAuNSkpICsKICB0aGVtZSgjYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA5MCwgaGp1c3QgPSAxLCB2anVzdCA9IDEpLAogICAgbGVnZW5kLnBvc2l0aW9uID0gInRvcCIpICsKICBsYWJzKHRpdGxlID0gIih6b29tZWQgaW4pIiwKICAgICAgIHN1YnRpdGxlID0gIlJlc3BvbnNlIG9wdGlvbnM6IDAgPSBuZXZlciwgMSA9IHJhcmVseSwgMiA9IG9mdGVuLCAzID0gdmVyeSBvZnRlblxuRXJyb3IgYmFycyBhcmUgYm9vdHN0cmFwcGVkIDk1JSBjb25maWRlbmNlIGludGVydmFscyIsCiAgICAgICB4ID0gIlF1ZXN0aW9uIHR5cGUiLAogICAgICAgeSA9ICJNZWFuIHJlc3BvbnNlIiwgCiAgICAgICBzaGFwZSA9ICJFbW90aW9uIikKYGBgCgpUaGlzIGNvbXBsaWNhdGVzIChhbmQgdG8gbXkgbWluZCwgY2xhcmlmaWVzKSB0aGUgcGljdHVyZSBzb21ld2hhdC4gSGVyZSBhcmUgYSBmZXcgb2JzZXJ2YXRpb25zOgoKLSBJbiBzb21lIHNpdGVzIHBhcnRpY2lwYW50cyB3ZXJlIHByZXR0eSBjb25zaXN0ZW50IGFjcm9zcyBxdWVzdGlvbnMgaW4gdGVybXMgb2YgdGhlICJvcmRlcmluZyIgb2YgZW1vdGlvbnM6IGUuZy4uLi4KICAgIC0gSW4gdGhlIFVTIChsZWZ0bW9zdCBjb2x1bW4pLCBjYXJpbmcgd2FzIHZpcnR1YWxseSBhbHdheXMgbW9zdCBwb3RlbnQKICAgIC0gSW4gQ2hpbmEgKGZvdXJ0aCBjb2x1bW4gZnJvbSBsZWZ0KSwgY2FyaW5nIHdhcyBhbG1vc3QgYWx3YXlzIG1vc3QgcG90ZW50LCB3aXRoIHRoZSBtYWpvciBleGNlcHRpb24gb2YgcXVlc3Rpb24gImQiICh3aGV0aGVyIHRoZSBlbW90aW9uIGNvdWxkIG1ha2UgdGhlIGVtb3RlciBzaWNrL3dlbGwpCiAgICAtIEluIFZhbnVhdHUgKHJpZ2h0bW9zdCBjb2x1bW4pIGFuZ2VyIHdhcyBhbG1vc3QgYWx3YXlzIG1vc3QgcG90ZW50ICh3aXRoIHRoZSBtYWpvciBleGNlcHRpb24gb2YgcXVlc3Rpb24gImMiICh3aGV0aGVyIGEgc3Bpcml0IGNvdWxkIHVzZSB0aGUgZW1vdGlvbiB0byBodXJ0L2hlbHApCi0gSW4gb3RoZXIgc2l0ZXMgcGFydGljaXBhbnRzIGRpZmZlcmVudGlhdGVkIG1vcmUgYmV0d2VlbiBkaWZmZXJlbnQga2luZHMgb2YgcXVlc3Rpb25zOiBlLmcuLi4uIAogICAgLSBJbiBUaGFpbGFuZCwgKG1pZGRsZSBjb2x1bW4pIGFuZ2VyIHdhcyBtb3JlIHBvdGVudCBmb3IgcXVlc3Rpb25zICJiIiBhbmQgImQsIiB3aGlsZSBjYXJpbmcgd2FzIGNsZWFybHkgbW9yZSBwb3RlbnQgZm9yIHF1ZXN0aW9uICJlIgotIFNvbWUgcXVlc3Rpb25zIGVsaWNpdGVkIHNpbWlsYXIgIm9yZGVyaW5ncyIgb2YgZW1vdGlvbnMgYWNyb3NzIHNpdGVzOiBlLmcuLi4uCiAgICAtIEZvciBxdWVzdGlvbiAiYyIgKHdoZXRoZXIgYSBzcGlyaXQgY291bGQgdXNlIHRoZSBlbW90aW9uIHRvIGh1cnQvaGVscCksIHdoZW4gc2l0ZXMgZGlmZmVyZW50aWF0ZWQgYWNyb3NzIGVtb3Rpb25zLCBpdCB0ZW5kZWQgdG8gYmUgaW4gdGhlIGRpcmVjdGlvbiBvZiBjYXJpbmcgYmVpbmcgbW9zdCBwb3RlbnQgKGJ1dCBwZW9wbGUgZGlkbid0IHJlYWxseSBkaWZmZXJlbnRpYXRlIGluIEdoYW5hIG9yIFRoYWlsYW5kKQogICAgLSBGb3IgcXVlc3Rpb24gImQiICh3aGV0aGVyIHRoZSBlbW90aW9uIGNvdWxkIG1ha2UgdGhlIGVtb3RlciBzaWNrL3dlbGwpLCB3aGVuIHNpdGVzIGRpZmZlcmVudGlhdGVkIGFjcm9zcyBlbW90aW9ucywgaXQgdGVuZGVkIHRvIGJlIGluIHRoZSBkaXJlY3Rpb24gb2YgYW5nZXIgYmVpbmcgbW9zdCBwb3RlbnQgKGJ1dCBwZW9wbGUgZGlkbid0IHJlYWxseSBkaWZmZXJlbnRpYXRlIGluIHRoZSBVUykKICAgIC0gRm9yIHF1ZXN0aW9uICJlIiAod2hldGhlciwgaWYgdGhlIG90aGVyIHBlcnNvbiBnb3Qgc2ljay93ZWxsLCB0aGUgZW1vdGVyJ3MgZW1vdGlvbiBjb3VsZCBiZSB0aGUgY2F1c2UpLCB3aGVuIHNpdGVzIGRpZmZlcmVudGlhdGVkIGFjcm9zcyBlbW90aW9ucywgaXQgdGVuZGVkIHRvIGJlIGluIHRoZSBkaXJlY3Rpb24gb2YgY2FyaW5nIGJlaW5nIG1vc3QgcG90ZW50IChidXQgcGVvcGxlIGRpZG4ndCByZWFsbHkgZGlmZmVyZW50aWF0ZSBpbiBWYW51YXR1KQotIE90aGVyIHF1ZXN0aW9ucyBlbGljaXRlZCBkaWZmZXJlbnQgIm9yZGVyaW5ncyIgb2YgZW1vdGlvbnMgYWNyb3NzIHNpdGVzIChxdWVzaXRvbiAiYSwiIHdoZXRoZXIgdGhlIGVtb3RlciBjb3VsZCBodXJ0L2hlbHAgdGhlIG90aGVyIHdpdGggdGhlaXIgZW1vdGlvbjsgYW5kIHF1ZXN0aW9uICJiLCIgd2hldGhlciB0aGUgZW1vdGVyIGNvdWxkIGh1cnQvaGVscCB0aGUgb3RoZXIganVzdCBieSB0aGlua2luZyBlbW90aW9uYWwgdGhvdWdodHMpCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIE92ZXJhbGwgc2NvcmVzCgpgYGB7cn0KIyBleGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgYW55IGF0dGVudGlvbiBjaGVjawpkX3Bhc3NfbWIgPC0gZCAlPiUgCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJ0b3RhbCIpKSAlPiUKICBkaXN0aW5jdCgpICU+JQogIGdhdGhlcihzY2FsZSwgc2NvcmUsIC1jKHA3X2N0cnksIHA3X3N1YmopKSAlPiUKICBtdXRhdGUoc2NhbGUgPSBnc3ViKCJwN18iLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIl8uKiQiLCAiIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IHJlY29kZV9mYWN0b3Ioc2NhbGUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiYWJzIiA9ICJBYnNvcnB0aW9uIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJkc2UiID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAic2UiID0gIlNwaXJpdHVhbCBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIndvYiIgPSAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAidW5ldiIgPSAiVW5jb21tb24gZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJleHNlbiIgPSAiRXh0cmFzZW5zb3J5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJodGhrIiA9ICJIYXJkIHRoaW5raW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJwb3IiID0gIlBvcm9zaXR5IiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJtbSIgPSAiTWFydGhhIHN0b3J5IikpICU+JSAKICBncm91cF9ieShwN19jdHJ5LCBzY2FsZSkgJT4lCiAgbXVsdGlfYm9vdF9zdGFuZGFyZChjb2wgPSAic2NvcmUiKSAlPiUgCiAgdW5ncm91cCgpCmBgYAoKYGBge3J9CiMgZXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIGFueSBhdHRlbnRpb24gY2hlY2sKc2NvcmVzX3Bsb3RfcGFzc19hIDwtIGQgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIpKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19jdHJ5LCB5ID0gc2NvcmUsIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF93cmFwKH5zY2FsZSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9qaXR0ZXIoaGVpZ2h0ID0gMC4yLCB3aWR0aCA9IDAuNCwgYWxwaGEgPSAwLjIsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fcG9pbnRyYW5nZShkYXRhID0gZF9wYXNzX21iLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAyKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMiLAogICAgICAgc3VidGl0bGUgPSAiRXhsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3NcbkVycm9yIGJhcnMgYXJlIDk1JSBib290c3RyYXBwZWQgQ0lzIiwKICAgICAgIHggPSAiU2l0ZSIsIHkgPSAiU2NvcmUiKQpgYGAKCmBgYHtyfQojIGV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCBhbnkgYXR0ZW50aW9uIGNoZWNrCnNjb3Jlc19wbG90X3Bhc3NfYiA8LSBkX3Bhc3NfbWIgJT4lIAogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IG1lYW4sIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF93cmFwKH5zY2FsZSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBzaG93LmxlZ2VuZCA9IEYpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNjb3JlcyBmb3IgYWxsIHNjYWxlcyAoem9vbWVkIGluKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJFeGx1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrc1xuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAyLjIsIGluY2x1ZGUgPSBUfQojIGV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCBhbnkgYXR0ZW50aW9uIGNoZWNrCnBsb3RfZ3JpZChzY29yZXNfcGxvdF9wYXNzX2EsIHNjb3Jlc19wbG90X3Bhc3NfYiwgbmNvbCA9IDEpCmBgYAoKYGBge3J9CiMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKZF9hbGxfbWIgPC0gZDAgJT4lIAogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygidG90YWwiKSkgJT4lCiAgZGlzdGluY3QoKSAlPiUKICBnYXRoZXIoc2NhbGUsIHNjb3JlLCAtYyhwN19jdHJ5LCBwN19zdWJqKSkgJT4lCiAgbXV0YXRlKHNjYWxlID0gZ3N1YigicDdfIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJfLiokIiwgIiIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSByZWNvZGVfZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImFicyIgPSAiQWJzb3JwdGlvbiIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZHNlIiA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInNlIiA9ICJTcGlyaXR1YWwgZXZlbnRzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ3b2IiID0gIldheXMgb2YgYmVpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInVuZXYiID0gIlVuY29tbW9uIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiZXhzZW4iID0gIkV4dHJhc2Vuc29yeSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiaHRoayIgPSAiSGFyZCB0aGlua2luZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAicG9yIiA9ICJQb3Jvc2l0eSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAibW0iID0gIk1hcnRoYSBzdG9yeSIpKSAlPiUgCiAgZ3JvdXBfYnkocDdfY3RyeSwgc2NhbGUpICU+JQogIG11bHRpX2Jvb3Rfc3RhbmRhcmQoY29sID0gInNjb3JlIikgJT4lIAogIHVuZ3JvdXAoKQpgYGAKCmBgYHtyfQojIGluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzCnNjb3Jlc19wbG90X2FsbF9hIDwtIGQwICU+JSAKICBzZWxlY3QocDdfY3RyeSwgcDdfc3ViaiwgY29udGFpbnMoInRvdGFsIikpICU+JQogIGRpc3RpbmN0KCkgJT4lCiAgZ2F0aGVyKHNjYWxlLCBzY29yZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IHNjb3JlLCBjb2xvciA9IHA3X2N0cnkpKSArCiAgZmFjZXRfd3JhcCh+c2NhbGUsIHNjYWxlcyA9ICJmcmVlIikgKwogIGdlb21faml0dGVyKGhlaWdodCA9IDAuMiwgd2lkdGggPSAwLjQsIGFscGhhID0gMC4yLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3BvaW50cmFuZ2UoZGF0YSA9IGRfYWxsX21iLAogICAgICAgICAgICAgICAgICBhZXMoeSA9IG1lYW4sIHltaW4gPSBjaV9sb3dlciwgeW1heCA9IGNpX3VwcGVyKSwKICAgICAgICAgICAgICAgICAgY29sb3IgPSAiYmxhY2siLCBmYXR0ZW4gPSAyKSArCiAgdGhlbWUoYXhpcy50ZXh0LnggPSBlbGVtZW50X3RleHQoYW5nbGUgPSA0NSwgaGp1c3QgPSAxLCB2anVzdCA9IDEpKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTY29yZXMgZm9yIGFsbCBzY2FsZXMiLAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMsIGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrc1xuRXJyb3IgYmFycyBhcmUgOTUlIGJvb3RzdHJhcHBlZCBDSXMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJTY29yZSIpCmBgYAoKYGBge3J9CiMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKc2NvcmVzX3Bsb3RfYWxsX2IgPC0gZF9hbGxfbWIgJT4lIAogIG11dGF0ZShzY2FsZSA9IGdzdWIoInA3XyIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXy4qJCIsICIiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gcmVjb2RlX2ZhY3RvcihzY2FsZSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJhYnMiID0gIkFic29ycHRpb24iLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImRzZSIgPSAiRGFpbHkgc3Bpcml0dWFsIGV4cGVyaWVuY2VzIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJzZSIgPSAiU3Bpcml0dWFsIGV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAid29iIiA9ICJXYXlzIG9mIGJlaW5nIiwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJ1bmV2IiA9ICJVbmNvbW1vbiBldmVudHMiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImV4c2VuIiA9ICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgImh0aGsiID0gIkhhcmQgdGhpbmtpbmciLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgInBvciIgPSAiUG9yb3NpdHkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIm1tIiA9ICJNYXJ0aGEgc3RvcnkiKSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfY3RyeSwgeSA9IG1lYW4sIGNvbG9yID0gcDdfY3RyeSkpICsKICBmYWNldF93cmFwKH5zY2FsZSwgc2NhbGVzID0gImZyZWUiKSArCiAgZ2VvbV9wb2ludHJhbmdlKGFlcyh5bWluID0gY2lfbG93ZXIsIHltYXggPSBjaV91cHBlciksIAogICAgICAgICAgICAgICAgICBmYXR0ZW4gPSAyLCBzaG93LmxlZ2VuZCA9IEYpICsKICB0aGVtZShheGlzLnRleHQueCA9IGVsZW1lbnRfdGV4dChhbmdsZSA9IDQ1LCBoanVzdCA9IDEsIHZqdXN0ID0gMSkpICsKICBzY2FsZV9jb2xvcl9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNjb3JlcyBmb3IgYWxsIHNjYWxlcyAoem9vbWVkIGluKSIsCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cywgZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzXG5FcnJvciBiYXJzIGFyZSA5NSUgYm9vdHN0cmFwcGVkIENJcyIsCiAgICAgICB4ID0gIlNpdGUiLCB5ID0gIlNjb3JlIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDIuMiwgaW5jbHVkZSA9IFR9CiMgaW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMKcGxvdF9ncmlkKHNjb3Jlc19wbG90X2FsbF9hLCBzY29yZXNfcGxvdF9hbGxfYiwgbmNvbCA9IDEpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBIaXN0b2dyYW1zIGZvciBlYWNoIHNjYWxlCgojIyBBYnNvcnB0aW9uCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19hYnNfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfYWJzX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDE3LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDM0LCAxNykpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiQWJzb3JwdGlvbiIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMzQpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfYWJzX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfYWJzX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19hYnNfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2Fic190b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfYWJzX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDE3LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMyLCAxNikpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiQWJzb3JwdGlvbiIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBhYnNvcnB0aW9uIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMzIpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2RzZV90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZHNlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19kc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMzUsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNzAsIDM1KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJEYWlseSBzcGlyaXR1YWwgZXhwZXJpZW5jZXMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTcwKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X2RzZV9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2RzZV90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfZHNlX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19kc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2RzZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzNSwgeSA9IDAuMDUsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA3MCwgMzUpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkRhaWx5IHNwaXJpdHVhbCBleHBlcmllbmNlcyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBEU0Ugc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC03MCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIFNwaXJpdHVhbCBldmVudHMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19zZV90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfc2VfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3NlX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19zZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSA0OCwgeSA9IDAuMDUsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA5NiwgMjQpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlNwaXJpdHVhbCBldmVudHMiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTk2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZDAgJT4lCiAgZmlsdGVyKHA3X3NlX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfc2VfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3NlX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSA1LCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19zZV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfc2VfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gNDgsIHkgPSAwLjA1LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgOTYsIDI0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJTcGlyaXR1YWwgZXZlbnRzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIFNFIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtOTYpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBXYXlzIG9mIGJlaW5nCgojIyMgQWxsIGl0ZW1zCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfd29iX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN193b2JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3dvYl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfd29iX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDAsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTM2LCAzNiwgMTgpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIldheXMgb2YgYmVpbmciLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMzYgdG8gMzYpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN193b2JfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3dvYl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfd29iX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN193b2JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMCwgeSA9IDAuMDYsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMzYsIDM2LCAxOCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiV2F5cyBvZiBiZWluZyIsIAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMgKGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrcykiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTM2IHRvIDM2KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCiMjIyBFeGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcwoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIHNlbGVjdChwN19jdHJ5LCBwN19zdWJqLCBjb250YWlucygiX3dvYl8iKSwKICAgICAgICAgLWMoY29udGFpbnMoInRvdGFsIiksIGNvbnRhaW5zKCJjaGVjayIpLCBjb250YWlucygicmV2ZXJzZSIpKSkgJT4lCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGFzLm51bWVyaWMocmVzcG9uc2UpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqKSAlPiUKICBzdW1tYXJpc2Uoc2NvcmVfbm9yZXYgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZV9ub3JldiwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gNSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeCA9IDAsIHkgPSAwLjA2LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTI4LCAyOCwgMTQpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIldheXMgb2YgYmVpbmcgKGV4Y2x1ZGluZyByZXZlcnNlLWNvZGVkIGl0ZW1zKSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yOCB0byAyOCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmRfY3RsX25vcmV2ICU+JQogIGZpbHRlcihzY2FsZSA9PSAid29iIiwgIWlzLm5hKHNjb3JlX25vcmV2KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAwLCB5ID0gMC4wNiwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0yOCwgMjgsIDE0KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJXYXlzIG9mIGJlaW5nIChleGNsdWRpbmcgcmV2ZXJzZS1jb2RlZCBpdGVtcykiLCAKICAgICAgIHN1YnRpdGxlID0gIkluY2x1ZGluZyBhbGwgcGFydGljaXBhbnRzIChldmVuIGlmIHRoZXkgZmFpbGVkIGF0dGVudGlvbiBjaGVja3MpIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0yOCB0byAyOCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBVbmNvbW1vbiBldmVudHMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN191bmV2X3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN191bmV2X3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAxLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN191bmV2X3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDksIHkgPSAwLjIwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMTgsIDkpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIlVuY29tbW9uIGV2ZW50cyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMTgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfdW5ldl9jaGVjayA9PSAicGFzcyIpICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X3VuZXZfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3VuZXZfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3VuZXZfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3VuZXZfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gOSwgeSA9IDAuMjAsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCAxOCwgOSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiVW5jb21tb24gZXZlbnRzIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIFVORVYgc2NhbGUiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoMC0xOCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEV4dHJhc2Vuc29yeQoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2V4c2VuX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19leHNlbl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMSwgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZXhzZW5fdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2V4c2VuX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMzAsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA3LCAxKSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJFeHRyYXNlbnNvcnkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCDiiaUxIG9mIDcgYXR0ZW50aW9uIGNoZWNrcyIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTcpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfZXhzZW5fY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19leHNlbl90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfZXhzZW5fdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDEsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2V4c2VuX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19leHNlbl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjMwLCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgNywgMSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiRXh0cmFzZW5zb3J5IiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQgMSBvdXQgb2YgMSBhdHRlbnRpb24gY2hlY2tzIGVtYmVkZGVkIGluIEVYU0VOIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtNykiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMjIEhhcmQgdGhpbmtpbmcKCiMjIyBBbGwgaXRlbXMKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19odGhrX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19odGhrX3RvdGFsLCBmaWxsID0gcDdfY3RyeSkpICsKICBmYWNldF9ncmlkKH5wN19jdHJ5KSArCiAgZ2VvbV9oaXN0b2dyYW0oYWVzKHkgPSBzdGF0KGRlbnNpdHkpKSwgYmlud2lkdGggPSAzLCBzaG93LmxlZ2VuZCA9IEYpICsKICBnZW9tX3ZsaW5lKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19odGhrX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMzgsIDM4LCAxOSkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZCB0aGlua2luZyIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKC0zOCB0byAzOCkiLCAKICAgICAgIHkgPSAiRGVuc2l0eSAocHJveHkgZm9yIHBlcmNlbnRhZ2UpIikKYGBgCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQwICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2h0aGtfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X2h0aGtfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2h0aGtfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X2h0aGtfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMy41LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKC0zOCwgMzgsIDE5KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJIYXJkIHRoaW5raW5nIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJJbmNsdWRpbmcgYWxsIHBhcnRpY2lwYW50cyAoZXZlbiBpZiB0aGV5IGZhaWxlZCBhdHRlbnRpb24gY2hlY2tzKSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgtMzggdG8gMzgpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKIyMjIEV4Y2x1ZGluZyByZXZlcnNlLWNvZGVkIGl0ZW1zCgpgYGB7ciwgZmlnLndpZHRoID0gNCwgZmlnLmFzcCA9IDAuNCwgaW5jbHVkZSA9IFR9CmQgJT4lCiAgc2VsZWN0KHA3X2N0cnksIHA3X3N1YmosIGNvbnRhaW5zKCJfaHRoa18iKSwKICAgICAgICAgLWMoY29udGFpbnMoInRvdGFsIiksIGNvbnRhaW5zKCJjaGVjayIpKSkgJT4lCiAgICBzZWxlY3QoLWMocDdfaHRoa19ub3QuZnVuLCBwN19odGhrX2xpbC5jaGFsbGVuZywgcDdfaHRoa19hdm9pZC50aGluaywKICAgICAgICAgICAgICBwN19odGhrX2hyZC5oYXYudG8sIHA3X2h0aGtfc21hbC5kYWlseSwgcDdfaHRoa19saWwudGhvdWdodCwKICAgICAgICAgICAgICBwN19odGhrX25vdC5leGNpdGluZywgcDdfaHRoa19tZW50YWwuZWZmcnQsIAogICAgICAgICAgICAgIHA3X2h0aGtfam9iLmRvbmUpKSAlPiUgCiAgZ2F0aGVyKHF1ZXN0aW9uLCByZXNwb25zZSwgLWMocDdfY3RyeSwgcDdfc3ViaikpICU+JQogIG11dGF0ZShyZXNwb25zZSA9IGFzLm51bWVyaWMocmVzcG9uc2UpKSAlPiUKICBncm91cF9ieShwN19jdHJ5LCBwN19zdWJqKSAlPiUKICBzdW1tYXJpc2Uoc2NvcmVfbm9yZXYgPSBzdW0ocmVzcG9uc2UsIG5hLnJtID0gVCkpICU+JQogIHVuZ3JvdXAoKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBzY29yZV9ub3JldiwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4oc2NvcmVfbm9yZXYpKSwKICAgICAgICAgICAgIGFlcyh4aW50ZXJjZXB0ID0gbWVkaWFuKSwgbHR5ID0gMikgKwogIGdlb21fbGFiZWwoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeCA9IDMuNSwgeSA9IDAuMDgsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgtMjAsIDIwLCAxMCkpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiSGFyZCB0aGlua2luZyAoZXhjbHVkaW5nIHJldmVyc2UtY29kZWQgaXRlbXMpIiwgCiAgICAgICBzdWJ0aXRsZSA9ICJFeGNsdWRpbmcgcGFydGljaXBhbnRzIHdobyBmYWlsZWQg4omlMSBvZiA3IGF0dGVudGlvbiBjaGVja3MiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTIwIHRvIDIwKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZF9jdGxfbm9yZXYgJT4lCiAgZmlsdGVyKHNjYWxlID09ICJodGhrIiwgIWlzLm5hKHNjb3JlX25vcmV2KSkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gc2NvcmVfbm9yZXYsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHNjb3JlX25vcmV2KSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihzY29yZV9ub3JldikpLAogICAgICAgICAgICAgYWVzKHggPSAzLjUsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoLTIwLCAyMCwgMTApKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIkhhcmQgdGhpbmtpbmcgKGV4Y2x1ZGluZyByZXZlcnNlLWNvZGVkIGl0ZW1zKSIsIAogICAgICAgc3VidGl0bGUgPSAiSW5jbHVkaW5nIGFsbCBwYXJ0aWNpcGFudHMgKGV2ZW4gaWYgdGhleSBmYWlsZWQgYXR0ZW50aW9uIGNoZWNrcykiLAogICAgICAgeCA9ICJUb3RhbCBzY29yZSAoLTIwIHRvIDIwKSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyMgUG9yb3NpdHkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19wb3JfdG90YWwpICU+JQogIGdncGxvdChhZXMoeCA9IHA3X3Bvcl90b3RhbCwgZmlsbCA9IHA3X2N0cnkpKSArCiAgZmFjZXRfZ3JpZCh+cDdfY3RyeSkgKwogIGdlb21faGlzdG9ncmFtKGFlcyh5ID0gc3RhdChkZW5zaXR5KSksIGJpbndpZHRoID0gMywgc2hvdy5sZWdlbmQgPSBGKSArCiAgZ2VvbV92bGluZShkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfcG9yX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19wb3JfdG90YWwpKSwKICAgICAgICAgICAgIGFlcyh4ID0gMTcsIHkgPSAwLjA4LCAKICAgICAgICAgICAgICAgICBsYWJlbCA9IHBhc3RlMCgibWVkaWFuOiAiLCByb3VuZChtZWRpYW4sIDIpKSksCiAgICAgICAgICAgICBoanVzdCA9IDAuNSwgZmlsbCA9ICJ3aGl0ZSIsIGFscGhhID0gMC41LCBzaXplID0gMykgKwogIHNjYWxlX3hfY29udGludW91cyhicmVha3MgPSBzZXEoMCwgMzIsIDE2KSkgKwogIHNjYWxlX2ZpbGxfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgbGFicyh0aXRsZSA9ICJQb3Jvc2l0eSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMzIpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfcG9yX2NoZWNrID09ICJwYXNzIikgJT4lCiAgZGlzdGluY3QocDdfY3RyeSwgcDdfc3ViaiwgcDdfcG9yX3RvdGFsKSAlPiUKICBnZ3Bsb3QoYWVzKHggPSBwN19wb3JfdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDMsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X3Bvcl90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHhpbnRlcmNlcHQgPSBtZWRpYW4pLCBsdHkgPSAyKSArCiAgZ2VvbV9sYWJlbChkYXRhID0gLiAlPiUgZ3JvdXBfYnkocDdfY3RyeSkgJT4lCiAgICAgICAgICAgICAgIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfcG9yX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeCA9IDE3LCB5ID0gMC4wOCwgCiAgICAgICAgICAgICAgICAgbGFiZWwgPSBwYXN0ZTAoIm1lZGlhbjogIiwgcm91bmQobWVkaWFuLCAyKSkpLAogICAgICAgICAgICAgaGp1c3QgPSAwLjUsIGZpbGwgPSAid2hpdGUiLCBhbHBoYSA9IDAuNSwgc2l6ZSA9IDMpICsKICBzY2FsZV94X2NvbnRpbnVvdXMoYnJlYWtzID0gc2VxKDAsIDMyLCAxNikpICsKICBzY2FsZV9maWxsX2JyZXdlcihwYWxldHRlID0gIkRhcmsyIikgKwogIGxhYnModGl0bGUgPSAiUG9yb3NpdHkiLCAKICAgICAgIHN1YnRpdGxlID0gIkV4Y2x1ZGluZyBwYXJ0aWNpcGFudHMgd2hvIGZhaWxlZCAxIG91dCBvZiAxIGF0dGVudGlvbiBjaGVja3MgZW1iZWRkZWQgaW4gUE9SIHNjYWxlIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtMzIpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKPFAgc3R5bGU9InBhZ2UtYnJlYWstYmVmb3JlOiBhbHdheXMiPgojIyBNYXJ0aGEgc3RvcnkKCmBgYHtyLCBmaWcud2lkdGggPSA0LCBmaWcuYXNwID0gMC40LCBpbmNsdWRlID0gVH0KZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19tbV90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfbW1fdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X21tX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAyNywgeSA9IDAuMDYsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA1NCwgMjcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIk1hcnRoYSBzdG9yeSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIOKJpTEgb2YgNyBhdHRlbnRpb24gY2hlY2tzIiwKICAgICAgIHggPSAiVG90YWwgc2NvcmUgKDAtNTQpIiwgCiAgICAgICB5ID0gIkRlbnNpdHkgKHByb3h5IGZvciBwZXJjZW50YWdlKSIpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDQsIGZpZy5hc3AgPSAwLjQsIGluY2x1ZGUgPSBUfQpkMCAlPiUKICBmaWx0ZXIocDdfbW1fY2hlY2sgPT0gInBhc3MiKSAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19tbV90b3RhbCkgJT4lCiAgZ2dwbG90KGFlcyh4ID0gcDdfbW1fdG90YWwsIGZpbGwgPSBwN19jdHJ5KSkgKwogIGZhY2V0X2dyaWQofnA3X2N0cnkpICsKICBnZW9tX2hpc3RvZ3JhbShhZXMoeSA9IHN0YXQoZGVuc2l0eSkpLCBiaW53aWR0aCA9IDUsIHNob3cubGVnZW5kID0gRikgKwogIGdlb21fdmxpbmUoZGF0YSA9IC4gJT4lIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogICAgICAgICAgICAgICBzdW1tYXJpc2UobWVkaWFuID0gbWVkaWFuKHA3X21tX3RvdGFsKSksCiAgICAgICAgICAgICBhZXMoeGludGVyY2VwdCA9IG1lZGlhbiksIGx0eSA9IDIpICsKICBnZW9tX2xhYmVsKGRhdGEgPSAuICU+JSBncm91cF9ieShwN19jdHJ5KSAlPiUKICAgICAgICAgICAgICAgc3VtbWFyaXNlKG1lZGlhbiA9IG1lZGlhbihwN19tbV90b3RhbCkpLAogICAgICAgICAgICAgYWVzKHggPSAyNywgeSA9IDAuMDYsIAogICAgICAgICAgICAgICAgIGxhYmVsID0gcGFzdGUwKCJtZWRpYW46ICIsIHJvdW5kKG1lZGlhbiwgMikpKSwKICAgICAgICAgICAgIGhqdXN0ID0gMC41LCBmaWxsID0gIndoaXRlIiwgYWxwaGEgPSAwLjUsIHNpemUgPSAzKSArCiAgc2NhbGVfeF9jb250aW51b3VzKGJyZWFrcyA9IHNlcSgwLCA1NCwgMjcpKSArCiAgc2NhbGVfZmlsbF9icmV3ZXIocGFsZXR0ZSA9ICJEYXJrMiIpICsKICBsYWJzKHRpdGxlID0gIk1hcnRoYSBzdG9yeSIsIAogICAgICAgc3VidGl0bGUgPSAiRXhjbHVkaW5nIHBhcnRpY2lwYW50cyB3aG8gZmFpbGVkIDEgb3V0IG9mIDEgYXR0ZW50aW9uIGNoZWNrcyBlbWJlZGRlZCBpbiBNTSBzY2FsZSIsCiAgICAgICB4ID0gIlRvdGFsIHNjb3JlICgwLTU0KSIsIAogICAgICAgeSA9ICJEZW5zaXR5IChwcm94eSBmb3IgcGVyY2VudGFnZSkiKQpgYGAKCgo8UCBzdHlsZT0icGFnZS1icmVhay1iZWZvcmU6IGFsd2F5cyI+CiMgUmVsaWFiaWxpdHkKCmBgYHtyfQphbHBoYV9ieV9jdHJ5X2Z1biA8LSBmdW5jdGlvbihkZil7CiAgCiAgZGYgPC0gZGYgJT4lIAogICAgc2VsZWN0KC1lbmRzX3dpdGgoIl9jYXQiKSwgLWNvbnRhaW5zKCJ0b3RhbCIpLCAtY29udGFpbnMoJ2NoZWNrJykpCiAgCiAgYWxwaGFfZnVuIDwtIGZ1bmN0aW9uKGRmKXsKICAgIGFscGhhX2RmIDwtIHBzeWNoOjphbHBoYShkZikKICAgIHJhd19hbHBoYSA8LSBhbHBoYV9kZiR0b3RhbFsxXVtdICU+JSBhcy5udW1lcmljKCkKICAgIHJldHVybihyYXdfYWxwaGEpCiAgfQogIAogIGEgPC0gYygKICAgIGFscGhhX3VzID0gYWxwaGFfZnVuKGRmICU+JSAKICAgICAgICAgICAgICAgICAgICAgICAgICAgZmlsdGVyKHA3X2N0cnkgPT0gIlVTIikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtcDdfY3RyeSkpLAogICAgYWxwaGFfZ2ggPSBhbHBoYV9mdW4oZGYgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJHaGFuYSIpICU+JQogICAgICAgICAgICAgICAgICAgICAgICAgICBzZWxlY3QoLXA3X2N0cnkpKSwKICAgIGFscGhhX3RoID0gYWxwaGFfZnVuKGRmICU+JSBmaWx0ZXIocDdfY3RyeSA9PSAiVGhhaWxhbmQiKSAlPiUKICAgICAgICAgICAgICAgICAgICAgICAgICAgc2VsZWN0KC1wN19jdHJ5KSksCiAgICBhbHBoYV9jaCA9IGFscGhhX2Z1bihkZiAlPiUgZmlsdGVyKHA3X2N0cnkgPT0gIkNoaW5hIikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtcDdfY3RyeSkpLAogICAgYWxwaGFfdnQgPSBhbHBoYV9mdW4oZGYgJT4lIGZpbHRlcihwN19jdHJ5ID09ICJWYW51YXR1IikgJT4lCiAgICAgICAgICAgICAgICAgICAgICAgICAgIHNlbGVjdCgtcDdfY3RyeSkpLAogICAgYWxwaGFfYWxsID0gYWxwaGFfZnVuKGRmICU+JSBzZWxlY3QoLXA3X2N0cnkpKSkKICAKICByZXR1cm4oYSkKfQpgYGAKCmBgYHtyfQpkX2FscGhhIDwtIGRhdGEuZnJhbWUoCiAgYERhaWx5IFNwaXJpdHVhbCBFeHBlcmllbmNlc2AgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl9kc2UiKSkpLAogIGBTcGlyaXR1YWwgRXZlbnRzYCA9IGFscGhhX2J5X2N0cnlfZnVuKAogICAgZDAgJT4lIHNlbGVjdChwN19jdHJ5LCBjb250YWlucygiX3NlIikpICU+JSByZW1vdmVfbWlzc2luZygpKSwKICBgVW5jb21tb24gRXZlbnRzYCA9IGFscGhhX2J5X2N0cnlfZnVuKAogICAgZDAgJT4lIHNlbGVjdChwN19jdHJ5LCBjb250YWlucygiX3VuZXYiKSkpLAogIGBFeHRyYXNlbnNvcnlgID0gYWxwaGFfYnlfY3RyeV9mdW4oCiAgICBkMCAlPiUgc2VsZWN0KHA3X2N0cnksIGNvbnRhaW5zKCJfZXhzZW4iKSkpLAogIGBBYnNvcnB0aW9uYCA9IGFscGhhX2J5X2N0cnlfZnVuKAogICAgZDAgJT4lIHNlbGVjdChwN19jdHJ5LCBjb250YWlucygiX2FicyIpKSksCiAgYFBvcm9zaXR5IChEdWxpbilgID0gYWxwaGFfYnlfY3RyeV9mdW4oCiAgICBkMCAlPiUgc2VsZWN0KHA3X2N0cnksIGNvbnRhaW5zKCJfcG9yIikpKSwKICBgTWFydGhhIFN0b3J5YCA9IGFscGhhX2J5X2N0cnlfZnVuKAogICAgZDAgJT4lIHNlbGVjdChwN19jdHJ5LCBjb250YWlucygiX21tIikpKSwKICBgV2F5cyBvZiBiZWluZ2AgPSBhbHBoYV9ieV9jdHJ5X2Z1bigKICAgIGQwICU+JSBzZWxlY3QocDdfY3RyeSwgY29udGFpbnMoIl93b2IiKSkpLAogIGBIYXJkIHRoaW5raW5nYCA9IGFscGhhX2J5X2N0cnlfZnVuKAogICAgZDAgJT4lIHNlbGVjdChwN19jdHJ5LCBjb250YWlucygiX2h0aGsiKSkpLAogIGBXYXlzIG9mIGJlaW5nIChubyByZXYpYCA9IGFscGhhX2J5X2N0cnlfZnVuKAogICAgZDAgJT4lIHNlbGVjdChwN19jdHJ5LCBjb250YWlucygiX3dvYiIpLCAtY29udGFpbnMoInJldmVyc2UiKSkpLAogIGBIYXJkIHRoaW5raW5nIChubyByZXYpYCA9IGFscGhhX2J5X2N0cnlfZnVuKAogICAgZDAgJT4lIHNlbGVjdChwN19jdHJ5LCBjb250YWlucygiX2h0aGsiKSwgCiAgICAgICAgICAgICAgICAgIC1jKCJwN19odGhrX25vdC5mdW4iLCAicDdfaHRoa19saWwuY2hhbGxlbmciLCAKICAgICAgICAgICAgICAgICAgICAgInA3X2h0aGtfYXZvaWQudGhpbmsiLCAicDdfaHRoa19ocmQuaGF2LnRvIiwgCiAgICAgICAgICAgICAgICAgICAgICJwN19odGhrX3NtYWwuZGFpbHkiLCAicDdfaHRoa19saWwudGhvdWdodCIsCiAgICAgICAgICAgICAgICAgICAgICJwN19odGhrX25vdC5leGNpdGluZyIsICJwN19odGhrX21lbnRhbC5lZmZydCIsCiAgICAgICAgICAgICAgICAgICAgICJwN19odGhrX2pvYi5kb25lIikpKSkgJT4lCiAgcm93bmFtZXNfdG9fY29sdW1uKCJzYW1wbGUiKSAlPiUKICBnYXRoZXIoc2NhbGUsIHJhd19hbHBoYSwgLXNhbXBsZSkgJT4lCiAgbXV0YXRlKHNhbXBsZSA9IAogICAgICAgICAgIHJlY29kZV9mYWN0b3IoZ3N1YigiYWxwaGFfIiwgIiIsIHNhbXBsZSksCiAgICAgICAgICAgICAgICAgICAgICAgICAidXMiID0gIlVTIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJnaCIgPSAiR2hhbmEiLAogICAgICAgICAgICAgICAgICAgICAgICAgInRoIiA9ICJUaGFpbGFuZCIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiY2giID0gIkNoaW5hIiwKICAgICAgICAgICAgICAgICAgICAgICAgICJ2dCIgPSAiVmFudWF0dSIsCiAgICAgICAgICAgICAgICAgICAgICAgICAiYWxsIiA9ICJPVkVSQUxMIiksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXFwuXFwuJCIsICIpIiwgc2NhbGUpLAogICAgICAgICBzY2FsZSA9IGdzdWIoIlxcLlxcLiIsICIgKCIsIHNjYWxlKSwKICAgICAgICAgc2NhbGUgPSBnc3ViKCJcXC4kIiwgIikiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZ3N1YigiXFwuIiwgIiAiLCBzY2FsZSksCiAgICAgICAgIHNjYWxlID0gZmFjdG9yKHNjYWxlLAogICAgICAgICAgICAgICAgICAgICAgICBsZXZlbHMgPSBjKCJEYWlseSBTcGlyaXR1YWwgRXhwZXJpZW5jZXMiLCAKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiU3Bpcml0dWFsIEV2ZW50cyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIlVuY29tbW9uIEV2ZW50cyIsICJFeHRyYXNlbnNvcnkiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJBYnNvcnB0aW9uIiwgIlBvcm9zaXR5IChEdWxpbikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJNYXJ0aGEgU3RvcnkiLCAiV2F5cyBvZiBiZWluZyIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIldheXMgb2YgYmVpbmcgKG5vIHJldikiLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICJIYXJkIHRoaW5raW5nIiwgIkhhcmQgdGhpbmtpbmcgKG5vIHJldikiKSkpCmBgYAoKYGBge3IsIGZpZy53aWR0aCA9IDUsIGZpZy5hc3AgPSAwLjUsIGluY2x1ZGUgPSBUfQpkX2FscGhhICU+JQogIG11dGF0ZShzY29wZSA9IGlmZWxzZShzYW1wbGUgPT0gIk9WRVJBTEwiLCAic2l0ZSIsICJvdmVyYWxsIikpICU+JQogIGdncGxvdChhZXMoeCA9IHNhbXBsZSwgeSA9IHJhd19hbHBoYSwgIGNvbG9yID0gc2FtcGxlLCAKICAgICAgICAgICAgIHNoYXBlID0gc2NvcGUsIHNpemUgPSBzY29wZSkpICsKICBmYWNldF93cmFwKH4gc2NhbGUsIG5jb2wgPSA2KSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC44LCBsdHkgPSAyKSArCiAgZ2VvbV9obGluZSh5aW50ZXJjZXB0ID0gMC43LCBsdHkgPSAyLCBjb2xvciA9ICJncmF5IikgKwogIGdlb21fcG9pbnQoc2hvdy5sZWdlbmQgPSBGKSArCiAgc2NhbGVfY29sb3JfYnJld2VyKHBhbGV0dGUgPSAiRGFyazIiKSArCiAgc2NhbGVfc2l6ZV9tYW51YWwodmFsdWVzID0gYygyLCA0KSkgKwogIHNjYWxlX3NoYXBlX21hbnVhbCh2YWx1ZXMgPSBjKDE2LCAxOCkpICsKICBzY2FsZV95X2NvbnRpbnVvdXMobGltaXRzID0gYygwLCAxKSkgKwogIHRoZW1lX2J3KCkgKwogIHRoZW1lKGF4aXMudGV4dC54ID0gZWxlbWVudF90ZXh0KGFuZ2xlID0gNDUsIGhqdXN0ID0gMSwgdmp1c3QgPSAxKSkgKwogIGxhYnModGl0bGUgPSAiUmVsaWFiaWxpdHkgYnkgc2l0ZSBhbmQgb3ZlcmFsbCIsCiAgICAgICBzdWJ0aXRsZSA9ICJDcm9uYmFjaCdzIGFscGhhID0gMC44IChibGFjayBkb3R0ZWQgbGluZSkgaXMgYSBjbGFzc2ljIGN1dG9mZiBmb3IgJ3ZlcnkgZ29vZCcgcmVsaWFiaWxpdHk7XG5pbiBwcmFjdGljZSwgYWxwaGEgPCAwLjcgKGdyYXkgZG90dGVkIGxpbmUpIGlzIG9mdGVuIGNvbnNpZGVyZWQgcHJvYmxlbWF0aWMiLAogICAgICAgeCA9ICJTaXRlIiwgeSA9ICJDcm9uYmFjaCdzIGFscGhhIChyYW5nZTogMC0xKSIpCmBgYAoKCjxQIHN0eWxlPSJwYWdlLWJyZWFrLWJlZm9yZTogYWx3YXlzIj4KIyBEZW1vZ3JhcGhpY3MKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIlBhcnRpY2lwYW50cyB3aG8gcGFzc2VkIGFsbCBhdHRlbnRpb24gY2hlY2tzIikKZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqKSAlPiUKICBjb3VudChwN19jdHJ5KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIkFsbCBwYXJ0aWNpcGFudHMiKQpkMCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqKSAlPiUKICBjb3VudChwN19jdHJ5KQpgYGAKCmBgYHtyLCBpbmNsdWRlID0gVH0KcHJpbnQoIlBhcnRpY2lwYW50cyB3aG8gcGFzc2VkIGFsbCBhdHRlbnRpb24gY2hlY2tzIikKZCAlPiUKICBkaXN0aW5jdChwN19jdHJ5LCBwN19zdWJqLCBwN19kZW1fc2V4KSAlPiUKICBncm91cF9ieShwN19jdHJ5KSAlPiUKICBjb3VudChwN19kZW1fc2V4KSAlPiUKICBtdXRhdGUocHJvcCA9IHJvdW5kKG4vc3VtKG4pLCAyKSkgJT4lCiAgdW5ncm91cCgpICU+JQogIHNlbGVjdCgtbikgJT4lCiAgc3ByZWFkKHA3X2RlbV9zZXgsIHByb3ApCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiQWxsIHBhcnRpY2lwYW50cyIpCmQwICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2RlbV9zZXgpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIGNvdW50KHA3X2RlbV9zZXgpICU+JQogIG11dGF0ZShwcm9wID0gcm91bmQobi9zdW0obiksIDIpKSAlPiUKICB1bmdyb3VwKCkgJT4lCiAgc2VsZWN0KC1uKSAlPiUKICBzcHJlYWQocDdfZGVtX3NleCwgcHJvcCkKYGBgCgpJbXBvcnRhbnQgdG8gbm90ZSB0aGF0IGEgX3ZlcnlfIHN1YnN0YW50aWFsIG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyBpbiBUaGFpbGFuZCB3ZXJlIGZlbWFsZSwgYW5kIGEgc2xpZ2h0IG1ham9yaXR5IG9mIHBhcnRpY2lwYW50cyBpbiBWYW51YXR1IHdlcmUgZmVtYWxlLgoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiUGFydGljaXBhbnRzIHdobyBwYXNzZWQgYWxsIGF0dGVudGlvbiBjaGVja3MiKQpkICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2RlbV9hZ2UpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWVhbiA9IG1lYW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc2QgPSBzZChwN19kZW1fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtaW4gPSBtaW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWF4ID0gbWF4KHA3X2RlbV9hZ2UsIG5hLnJtID0gVCkpICU+JQogIG11dGF0ZV9hdCh2YXJzKG1lZGlhbiwgbWVhbiwgc2QsIG1pbiwgbWF4KSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAoKYGBge3IsIGluY2x1ZGUgPSBUfQpwcmludCgiQWxsIHBhcnRpY2lwYW50cyIpCmQwICU+JQogIGRpc3RpbmN0KHA3X2N0cnksIHA3X3N1YmosIHA3X2RlbV9hZ2UpICU+JQogIGdyb3VwX2J5KHA3X2N0cnkpICU+JQogIHN1bW1hcmlzZShtZWRpYW4gPSBtZWRpYW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWVhbiA9IG1lYW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgc2QgPSBzZChwN19kZW1fYWdlLCBuYS5ybSA9IFQpLAogICAgICAgICAgICBtaW4gPSBtaW4ocDdfZGVtX2FnZSwgbmEucm0gPSBUKSwKICAgICAgICAgICAgbWF4ID0gbWF4KHA3X2RlbV9hZ2UsIG5hLnJtID0gVCkpICU+JQogIG11dGF0ZV9hdCh2YXJzKG1lZGlhbiwgbWVhbiwgc2QsIG1pbiwgbWF4KSwgZnVucyhyb3VuZCguLCAyKSkpCmBgYAo=